首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证MySQLi->prepare()的返回值

问如何验证MySQLi->prepare()的返回值
EN

Stack Overflow用户
提问于 2014-11-18 05:32:34
回答 1查看 158关注 0票数 0

我到处寻找这个问题的答案,但没有结果。我向你们伸出援手,我的同伴们。:-)

我有以下看似简单的PHP代码:

代码语言:javascript
复制
$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:39222准备从订单中选择市场类型、类型、数量、价格、日期、日期、地点、状态、地点等。州= 222统计223统计 141117 21:21:54 222统计数字 223统计 141117 21:21:55 222统计数字 223统计 141117 21:21:56 222统计数字 223统计 141117 21:57-222执行从类型= 'Buy‘和state =’未决‘223退出的订单中选择市场、类型、数量、价格、日期、日期、班德利德、状态、转盘 222近距stmt 222退出

帮帮我,欧比万·克诺比,你是我唯一的希望(耶,已经很晚了,我觉得有点懒散)!

EN

回答 1

Stack Overflow用户

发布于 2014-11-19 04:02:59

我终于找到了答案。

在执行我发布的代码之前,我正在执行其他MySQL语句。在这些语句中,我执行了mysqli_report(MYSQLI_REPORT_ALL);。

正如我在PHP中所了解的那样,在调用mysqli_report(MYSQLI_REPORT_ALL);时应该非常小心。以下是mysqli_report()文档的摘录,解释了这个问题:

“使用此函数时要非常小心--这是一个每个进程的设置。如果您的服务器是为了在多个请求中重用单个PHP进程而设置的,这意味着在任何脚本中该函数的最后一次设置都会影响使用mysqli的所有其他脚本。为了安全起见,始终在脚本末尾调用。PHP的CGI版本可能是安全的。”

我将mysqli_report(MYSQLI_REPORT_OFF);添加到第一条MySQL语句的末尾,现在它就像一种魅力。谢谢PHP文档!!感谢sectus和Antoan Milkov的努力!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26987276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档