これはとても困惑しているので、単純なものが欠けているに違いありません。重複を防ぐために、挿入しているトランザクションがすでに存在するかどうかを確認するクエリがあります。コードは次のとおりです。
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を返します
--ステートメントでnum_rowsを実行した場合も同じです
-StatementまたはMySQLiオブジェクトにエラーは保存されません。
-fetch()ステートメントに出力を入れると、1行分のデータが出力されます
-フェッチした行を配列に格納して結果をカウントすると、1になります。
-同じことを、各変数で個別に実行してみました。
-同じサーバー(つまり、同じMySQLiオブジェクト)上の他のクエリは正常に機能しています。SELECTS、UPDATES、およびINSERTS。