2017-09-28 63 views
0

我想知道为什么我得到了一个错误说注意:未定义的变量:query_add_landdev_temp_payroll在C:\ XAMPP \ htdocs中\上线XX运\ AJAX \ ajaxLanddevNTPPayroll.php。在过去的两周里,它的工作非常完美。当我今天试图执行代码时,我遇到了那种错误。这里是我的代码:当它的外循环时未定义的变量 - PHP

$query_get_payroll = mysqli_query($new_conn, "SELECT ntp_with_ob_payroll_transaction.ntp_id, ntp_with_ob_payroll_transaction.allotment_code, ntp_with_ob_payroll_transaction.category_name, ntp_with_ob_payroll_transaction.block_number, ntp_with_ob_payroll_transaction.activity, ntp_with_ob_payroll_transaction.lot_number, ntp_with_ob_payroll_transaction.labor_cost, other_budget.quantity FROM ntp_with_ob_payroll_transaction JOIN other_budget ON ntp_with_ob_payroll_transaction.ob_id = other_budget.ob_id WHERE other_budget.transaction_id = $transaction_id AND other_budget.ob_number = '$ntp_number' AND is_payroll = 0"); 

while($row = mysqli_fetch_assoc($query_get_payroll)) { 

    $ntp_id = $row['ntp_id']; 
    $allotment_code = $row['allotment_code']; 
    $category_name = $row['category_name']; 
    $block_number = $row['block_number']; 
    $activity = $row['activity']; 
    $lot_number = $row['lot_number']; 
    $labor_cost = $row['labor_cost']; //this is equivalent to unit cost 
    $quantity = $row['quantity']; //this is equivalent to total percentage 


    $query_add_landdev_temp_payroll = mysqli_query($new_conn, "INSERT INTO temp_payroll_landdev(ntp_id, userid, transaction_id, ntp_number, contractor_name, allotment_code, category_name, block_number, activity, lot_numbers, regular_labor, quantity) VALUES($ntp_id, $_SESSION[userid], $transaction_id, '$ntp_number', '$fullname', '$allotment_code', '$category_name', $block_number, '$activity', '$lot_number', '$labor_cost', '$quantity')"); 
} 

if($query_add_landdev_temp_payroll) { 

    echo 1; 

    //database file name 
    $database_file = $database.'.sql'; 
    $new_database_file = $new_database.'.sql'; 

    if(file_exists('backup/'.$new_database_file)) { 

     unlink('backup/'.$new_database_file); 

     //backup project database 
     $command = "C:/xampp/mysql/bin/mysqldump --host=$new_host --user=$new_user --password=$new_pass $new_database > backup/$new_database_file"; 
     system($command); 

    } else { 

     //backup project database 
     $command = "C:/xampp/mysql/bin/mysqldump --host=$new_host --user=$new_user --password=$new_pass $new_database > backup/$new_database_file"; 
     system($command); 
    } 
} else { 

    echo 0; 
} 
+1

也许这个代码'$行= mysqli_fetch_assoc($ query_get_payroll)'返回的* falsy *值?因此,while循环没有运行。 – Wreigh

+0

@Wreigh我没有注意到...非常感谢。 –

+0

不用客气,您可以按照Naga的回答来检查* variable *是否已设置,或者iCoders是否回答以确保*变量*存在。 – Wreigh

回答

3

如果查询没有返回任何行,mysqli_fetch_assoc()将首次返回false,因此您将永远不会进入循环,并且永远不会分配给变量。如果你然后尝试使用该变量,你会得到该警告。

你可以给它一个默认的初始值的循环之前,也可以将您的测试更改为:

if (!empty($query_add_landdev_temp_payroll)) 

BTW,该变量只包含在循环的最后一次迭代的INSERT的结果。也许你应该把if块放在循环中,在INSERT之后?

另外,在循环中不需要做INSERT。你可以做整个事情有一个查询:

INSERT INTO temp_payroll_landdev(ntp_id, userid, transaction_id, ntp_number, contractor_name, allotment_code, category_name, block_number, activity, lot_numbers, regular_labor, quantity) 
SELECT ntp_with_ob_payroll_transaction.ntp_id, ntp_with_ob_payroll_transaction.allotment_code, ntp_with_ob_payroll_transaction.category_name, ntp_with_ob_payroll_transaction.block_number, ntp_with_ob_payroll_transaction.activity, ntp_with_ob_payroll_transaction.lot_number, ntp_with_ob_payroll_transaction.labor_cost, other_budget.quantity 
FROM ntp_with_ob_payroll_transaction 
JOIN other_budget ON ntp_with_ob_payroll_transaction.ob_id = other_budget.ob_id 
WHERE other_budget.transaction_id = $transaction_id AND other_budget.ob_number = '$ntp_number' AND is_payroll = 0 
+0

这是对的。它返回FALSE,因为我的$ query_get_payroll没有数据。非常感谢答案。 –

1

刚刚更新if条件就是这样,

if(isset($query_add_landdev_temp_payroll) && $query_add_landdev_temp_payroll) 
+0

非常感谢。 –

0

看起来像您使用的是while命令中的变量。所以在这个命令之外,这个变量不会定义。尝试在while命令前使用$query_add_landdev_temp_payroll = null;。希望它能帮助你!

+0

我只注意到我的$ query_get_payroll没有值,这就是为什么它没有定义。感谢@Wreigh –