为啥mysqli参数绑定会报错? [复制]

Posted

技术标签:

【中文标题】为啥mysqli参数绑定会报错? [复制]【英文标题】:Why does mysqli parameter binding give an error? [duplicate]为什么mysqli参数绑定会报错? [复制] 【发布时间】:2020-03-23 01:46:21 【问题描述】:

我有一段代码如下:

$sql = "INSERT INTO tasks
                (task_name, description, due_date, state, userID, importID)
                VALUES (?, ?, ?, ?, ?, ?)";
$stmt = mysqli_stmt_init($conn);
mysqli_stmt_bind_param($stmt, "sssiss", $name, $description, $due, 0, $_SESSION['userID'], $id);

在浏览器中运行时,浏览器无法加载,try catch 语句也不起作用,因此我无法确定确切的错误。我有一段几乎相同的代码,可以完美运行。唯一的区别是这段代码在 for each 循环中。这和它有关系吗?

编辑: 我忘了提到所有这些都是在 if 语句中准备语句。

if (!mysqli_stmt_prepare($stmt, $sql)) 
    header("Location: ../import.php?error=sqlinserterror");
    exit();
 else 
    mysqli_stmt_bind_param($stmt, "sssiss", $name, $description, $due, 0, $_SESSION['userID'], $id);

【问题讨论】:

我在 mysqli_bind_param 行周围添加了 try catch,在 try 中只有该行。没有发现错误,但浏览器仍然没有加载。对不起,我是 php 新手,什么是错误报告?我也确定绑定行是导致浏览器在被注释掉时加载错误的原因。 1.为了捕获异常,您必须为 mysqli.2 启用异常。你不应该在你的情况下捕捉到那个异常。 【参考方案1】:

使用bind_param,您需要传入参数名称,而不是值。试试:

mysqli_stmt_bind_param($stmt, "sssiss", $name, $description, $due, $zero, $user_id, $id);
$zero = 0;
$user_id = $_SESSION['userID'];

【讨论】:

以上是关于为啥mysqli参数绑定会报错? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

mySqli 使用通配符绑定参数 LIKE

MySQLi OOP 绑定参数错误

用mysqli从haversine公式绑定距离参数

如何使用循环绑定mysqli参数并将结果存储在数组中?

在 $bind_param() 中动态绑定参数; mysqli

如何在 PHP 中动态绑定 mysqli bind_param 参数?