如何更改此代码以显示插入失败的原因? PHP,MySQLi,准备好的陈述

时间:2011-12-06 09:01:51

标签: php error-handling mysqli prepared-statement

我遇到了这个问题,并且所有错误示例都使用了$ stmt->错误或我不明白的内容。我用程序式写作而不是OOP。我的插入失败,所以我很想调试它...

    $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中没有任何内容)。 / p>

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

2 个答案:

答案 0 :(得分:9)

使用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的丑陋的autocast功能

if(!mysqli_stmt_affected_rows($stmt))

答案 1 :(得分:-1)

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

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