【发布时间】:2014-11-18 05:32:34
【问题描述】:
我已经搜索了这个问题的答案,但无济于事。我与您联系,我的程序员同事。 :-)
我有以下看似简单的 PHP 代码:
$query = "SELECT marketid, type, quantity, price, datetime, bundleid, state, stoplossprice FROM orders WHERE type = ? AND state = ?";
$stmt = $login->mySQLi->prepare($query);
if(!$stmt) {
throw new Exception(mysqli_error($login->mySQLi));
}
$stmt->bind_param("ss", $strOrderType, $strOrderState);
if($stmt)
{
if(!$stmt->execute())
{
// Return an error
}
}
$stmt->store_result();
$stmt->bind_result($marketid, $ordertype, $quantity, $buyprice, $buydatetime, $bundleid, $orderstate, $stoplossprice);
while ($stmt->fetch()) {
// Do something with the returned data
}
$stmt->close();
我在其他几个地方也有几乎完全相同的代码,在其他地方它也可以工作。但是,由于某种原因,它在执行execute() 语句时终止。
另外,在执行prepare() 语句后,$stmt->affected_rows 等于-1。
我在 MySQLi 文档中读到,值 -1 表示“-1 表示查询返回错误”。但是,因为我不知道如何从$stmt 输出错误消息。 $stmt->errno 和 $stmt->error 没有值。
我还检查了 MySQL 的日志文件,它显示以下内容:
141117 21:21:39 222 Prepare SELECT marketid, type, quantity, price, datetime, bundleid, state, stoplossprice FROM orders WHERE type = ?和状态 = ? 222 统计 223 统计
141117 21:21:54 222 统计
223 统计
141117 21:21:55 222 统计
223 统计
141117 21:21:56 222 统计
223 统计
141117 21:21:57 222 执行 SELECT marketid、类型、数量、价格、日期时间、 bundleid, state, stoplossprice 来自订单 WHERE type = 'Buy' AND state = 'Pending' 第223话
222 关闭 stmt
第222章 放弃
帮助我欧比旺克诺比,你是我唯一的希望(是的,已经很晚了,我感觉有点邋遢)!
【问题讨论】:
-
你应该在执行后检查错误。
-
prepare不会影响数据库中的任何行,因此预期结果为 -1。您应该在execute之后检查错误。如果有错误,请粘贴到此处以便我们提供帮助。 -
对“$stmt->execute()”的调用会导致程序意外终止。所以,我看不到来自
$stmt->execute()的返回值。我可能应该在我原来的问题中包含这个。 -
这里有更多信息,希望对您有所帮助。我尝试使用 select 语句中的静态字符串,结果相同。也尝试使用
MySQLi->query(),但程序在MySQLi->query()执行时终止。我使用几乎相同的代码编写了许多其他选择、插入和更新语句。我真的被这个难住了。