這太令人費解了,我一定會錯過簡單的東西。我有一個查詢來檢查我要插入的事務是否已經存在,以防止重複。代碼如下:PHP Mysqli語句返回一行,-1行受到影響,並且沒有錯誤
function isaDupe($portableDB, $transactArray)
{
$ref = $transactArray["reference"];
$date = $transactArray["qdate"];
$time = $transactArray["time"];
//prints the query so I can run by hand to test
print "SELECT `counter` FROM transactions WHERE (`reference` = '$ref' AND `qdate` = '$date' AND `time` = '$time') ";
if ($dupeSelectStmt = $portableDB->prepare("SELECT `counter` FROM transactions WHERE (`reference` = ? AND `qdate` = ? AND `time` = ?)"))
{
$dupeSelectStmt->bind_param('sss',$ref, $date, $time);
$dupeSelectStmt->bind_result($counter);
$dupeSelectStmt->execute();
while ($dupeSelectStmt->fetch())
{
break;
}
$numRows = $portableDB->affected_rows;
if ($numRows > 0)
return TRUE;
else if ($numRows == -1)
{
print " ERROR: ";
print_r($portableDB->error);
print_r($dupeSelectStmt->error);
return FALSE;
}
else
return FALSE;
}
}
- 如果我通過Workbench在同一臺服務器上手動執行查詢,則返回24行。
- 如果我手動準備,設置和執行語句,這是一樣的。
-affected_rows返回-1
--same如果我做了NUM_ROWS的聲明
-there沒有存儲在聲明或MySQLi的對象錯誤。
- 如果我把打印的取()語句,它打印數據
- 如果我存儲提取的行到一個數組並計算一行結果的價值,這是1
- 我試着用每個變量分別運行它,同樣的事情。
-在同一臺服務器上的其他查詢(heck,在同一個MySQLi對象上)工作正常。選擇,更新和插入。
您提到它適用於其他查詢,它們是否也有多個行響應? – shortstuffsushi
是的,它們是通過相同的MySQLi構造函數完成的 –
您的實際代碼是否具有while(fetch)不做任何事情?如果你回顯每一行? while($ row = $ dupeSelectStmt-> fetch())){ print_r($ row); } – shortstuffsushi