这太令人费解了,我一定错过了一些简单的东西。我有一个查询来检查我插入的事务是否已经存在,以防止重复。这是代码:
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
- 我试过分别用每个变量运行它,同样的事情。
- 同一台服务器上的其他查询(哎呀,在同一个 MySQLi 对象上)工作正常。选择、更新和插入。