0

我已经在同一个小问题上坐了 10 多个小时,所以是时候问 stackoverflow 了!我已连接到数据库,但是在调用 mysqli_stmt_bind_param 时,我得到“无效的对象或资源”。

我已经在控制台中尝试了插入语句,它工作正常..

<?php
    $con=mysqli_connect("127.0.0.1:3306", "myUsername", "password");
    mysqli_select_db($con, "webshop");

    if (mysqli_connect_errno($con))
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $query= mysqli_stmt_init($con);

    mysqli_stmt_prepare($query, "INSERT INTO user (name, email, hash, address, tel) VALUES (?, ?, ?, ?, ?)");
    mysqli_stmt_bind_param($query, "ssssi", $name, $email, $hash, $address, $tel);
    if(mysqli_stmt_execute($query))
    {
        mysqli_close($con);
    }

?>

非常感谢您的帮助!

4

2 回答 2

2

您必须使用由返回的语句对象mysqli_stmt_prepare()

$stmt = mysqli_stmt_prepare($con, "INSERT INTO user (name, email, hash, address, tel) VALUES (?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, "ssssi", $name, $email, $hash, $address, $tel);
if(mysqli_stmt_execute($stmt))

此外,mysqli_stmt_init($con)不需要调用(我认为)。

于 2013-10-09T07:23:11.997 回答
0

mysqli_stmt_init当您使用程序样式访问 mysqli 时需要。

这将返回一个类型为 的对象mysqli_stmt,然后该对象充当您正在构建的查询的容器。因此,您应该将此作为第一个参数传递给mysqli_stmt_prepare,mysqli_stmt_bind_parammysqli_stmt_execute

所以你的代码看起来像:

<?php
    $con=mysqli_connect("127.0.0.1:3306", "myUsername", "password");
    mysqli_select_db($con, "webshop");

    if (mysqli_connect_errno($con))
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $stmt = mysqli_stmt_init($con);
    $query =  "INSERT INTO user (name, email, hash, address, tel) VALUES (?, ?, ?, ?, ?)";

    mysqli_stmt_prepare($stmt, $query);
    mysqli_stmt_bind_param($stmt, "ssssi", $name, $email, $hash, $address, $tel);
    if(mysqli_stmt_execute($stmt))
    {
        mysqli_close($stmt);
    }

?>

一,不相关的一点-您似乎要求您的tel字段(我认为是电话号码)是整数。如果您必须随时处理以 0 开头的电话号码(例如在英国很常见),这可能不是一个好主意。

于 2013-10-09T08:16:39.293 回答