我如何改变这段代码来显示插入失败的原因?PHP, mysql,预处理语句


How can I change this code to show WHY an insert failed? PHP, MySQLi, Prepared Statements

我被困在这个问题上,所有错误的例子都使用$stmt->错误或我不明白的东西。我用的是过程风格,而不是面向对象。我的插入失败了,所以我很好奇,请调试它…

    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_USER_PASSWORD, DB_NAME) or die(DB_CONNECT_ERROR);
    if (!$stmt = mysqli_prepare($dbc, $query)) die('SEL:mysqli_prepare');
    call_user_func_array('mysqli_stmt_bind_param', array_merge(array($stmt, 'sssssssssssssssssssssbsssss')), $idb);
    mysqli_stmt_execute($stmt);
    if (!mysqli_stmt_affected_rows($stmt)) {
            // Failed to insert
    } else {
            // Success
            }

插入失败…我怎么知道原因是什么?请提前感谢!我也在学习准备好的语句,所以如果我做错了什么,请告诉我…代码使其下降到//FAILED to INSERT行,当检查cpanel查询确实失败(DB中没有任何内容)。

如果你想用我上面使用的编程风格编写你自己的例子,并告诉我如何检查插入是否失败,这也很酷。一旦我看到你是怎么做的,我就可以修改我的代码。:)

使用mysqli_stmt_error()mysqli_stmt_errno()检索错误信息:

mysqli_stmt_execute($stmt);
printf("Error #%d: %s.'n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));


注意

我建议你使用

if(mysqli_stmt_affected_rows($stmt) == 0)

而不是依赖PHP的自动转换特性

if(!mysqli_stmt_affected_rows($stmt))

如果您回显stmt,并直接在SQL中尝试,这可能是最简单的方法。

在SQL中尝试,可以使用命令行,或者下载phpmyadmin,非常容易安装,并在那里运行查询。