【问题标题】:PHP MySQL prepared statement: Execute dies, returns neither true or falsePHP MySQL准备好的语句:执行死亡,既不返回真也不返回假
【发布时间】:2012-10-08 14:39:14
【问题描述】:

在这个块中,$stmt 不会像预期的那样返回 false,$bind 是 true,但是当我到达 $stmt->execute() 时,它会退出,并且既不返回 true 也不返回 false。唯一一次我可以从中得到错误的是,如果我在参数中使用一些变量来执行它的文档,但我从来没有在执行调用中使用过参数,而且我找不到其他人的例子在程序准备的语句中使用一个除外。我不知道我是否遗漏了什么。有人有什么想法吗?

$stmt = $mysqli->prepare("SELECT ... FROM `table` WHERE `tid` = ?");

if ($stmt !== FALSE) {
    echo 'Statement was true.';
    $bind = $stmt->bind_param('s', $this->tid);
    echo 'after bind';
    if ($bind)
        echo 'bind was good ';
    else
        echo 'bind was bad';
    $exec = $stmt->execute();
    if ($exec)
        echo 'exec was good';
    else
        echo 'exec was bad';
    echo 'after execute';
    // etc.
} else {
 // rest of code
}

@tntu 接受的答案和跟随 cmets 让我走上了解决这个问题的正确轨道。 [链接]http://stackoverflow.com/questions/5580039/fatal-error-uncaught-exception-mysqli-sql-exception-with-message-no-index-us

MySQL 可以做很多错误报告,我已经在堆栈和相关函数中设置了 mysqli_report(MYSQLI_REPORT_ALL),以便找出其他一些问题。 无论如何,设置 mysqli_report(MYSQLI_REPORT_OFF) 可以让执行按预期运行,而不是让 php 因警告和错误而陷入困境。

【问题讨论】:

  • 您确定您已阅读此处的文档和示例:bg2.php.net/manual/ro/mysqli.prepare.php 吗?
  • 你是说脚本从不打印“exec was good”或“exec was bad”?
  • 是的,因为它会在执行时死亡。

标签: php mysql sql prepared-statement


【解决方案1】:
$bind = $stmt->bind_param('s', $this->tid);

s代表字符串

将其更改为 i,它应该可以工作。

另请参阅有关进行一些错误管理的信息。 mysqli_erro, mysqli_errno

类似这样的:

if ($mysqli->errno) { logging("ERRO: ".$mysqli->error . "( " . $mysqli->errno . " )"); }

【讨论】:

  • 它没有。问题依然存在。
  • 愚蠢的问题,但你确定你真的连接到 MySQL 吗?有专门针对连接错误的错误处理。
  • 在代码顶部添加:ini_set("log_errors", 1); ini_set("error_log", DIR . "errors.log");
  • 是的,我在输入每个函数时检查连接。它是多余的,效率较低,但我以前遇到过这个问题。我认为如果我没有连接,prepare 也会传递给我错误。
  • [2012 年 10 月 18 日 08:56:28] PHP 致命错误:未捕获的异常 'mysqli_sql_exception' 带有消息 'No index used in query/prepared statement SELECT ... FROM table WHERE @ 987654326@ = ?'在 /home/www/htdocs/include/Audit.class.php:94 然后它给了我一个堆栈跟踪。
猜你喜欢
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
相关资源
最近更新 更多