这太令人困惑了,我一定错过了一些简单的东西。我有一个查询,检查我插入的事务是否已经存在,以防止重复。这是代码:
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() 语句中放入 print ,它会打印一行数据
-如果我将获取的行存储到数组中并计算结果,则结果为 1
-我尝试分别运行每个变量,同样的事情。
-同一服务器上的其他查询(哎呀,在同一个 MySQLi 对象上)工作正常。选择、更新和插入。
答案是我忘记在 mysqlistmt::execute() 之后调用 mysqlistmt::store_result。
一旦我添加了 $dupSelectStmt->store_result();我能够调用 $dupSelectStmt->num_rows 和 $portableDB->affected_rows,它们都显示了我知道我应该看到的 24 行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)