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

Per*_*yCS 1 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
            }
Run Code Online (Sandbox Code Playgroud)

我的插入失败了......我怎么知道原因是什么?请提前谢谢!我也只是学习准备好的语句,所以如果我做错了,请建议......代码将其归结为// FAILED TO INSERT行,当检查cpanel时,查询确实失败了(DB中没有任何内容).

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

Cod*_*bie 9

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

mysqli_stmt_execute($stmt);

printf("Error #%d: %s.\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
Run Code Online (Sandbox Code Playgroud)


注意

我建议你使用

if(mysqli_stmt_affected_rows($stmt) == 0)
Run Code Online (Sandbox Code Playgroud)

而不是依赖于PHP的丑陋的autocast功能

if(!mysqli_stmt_affected_rows($stmt))
Run Code Online (Sandbox Code Playgroud)