【发布时间】:2012-09-16 04:45:04
【问题描述】:
这太令人费解了,我一定是遗漏了一些简单的东西。我有一个查询来检查我插入的事务是否已经存在,以防止重复。代码如下:
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 对象上)工作正常。选择、更新和插入。
【问题讨论】:
-
您提到它适用于其他查询,它们是否也有多行响应?
-
是的,它们是通过相同的 MySQLi 构造函数完成的
-
您的实际代码是否有一段时间(获取)不做任何事情?如果你回显每一行? while ($row = $dupeSelectStmt->fetch())) { print_r($row); }
-
啊哈!我忘了 $stmt->store_result();执行后!
-
感谢您发布这个问题;在这里找到相同的问题和解决方案stackoverflow.com/q/5016253/469643