gpt4 book ai didi

php - 我正在尝试从即将弃用的 mysql 语句到 msqli 准备语句,我做错了什么?

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:42 25 4
gpt4 key购买 nike

这是我的 PHP:

    $db = new mysqli($db_host, $db_user, $db_pass, $db_database);

if (mysqli_connect_errno()) {
echo "Could not connect to database.";
}

// On first connect to database, create a user to hold data for users not logged in
$stmt = $db->prepare("SELECT id FROM users WHERE id = ?");
$stmt->bind_param("i" , 1);
$stmt->execute();

if ($stmt->num_rows == 0) {
$stmt = $db->prepare("INSERT INTO users (id, username, email, password) VALUES (?, ?, ?, ?");
$stmt->bind_param("isss", 1, "anonymous", "anonymous", password_hash("noidentity", PASSWORD_BCRYPT));
$stmt->execute();
}

但是当它运行时,我得到这个错误:

fatal error :无法通过引用传递参数 2

它指向我有 $stmt->bind_param("i", 1);

我不确定我做错了什么。

此外,如果我想将行中某个字段的值设置为比当前值高 1,我该如何使用准备好的语句来实现?

例如:UPDATE users SET wins = wins + 1 WHERE id = ? 将 wins 设置为某个值是一个值,所以我认为它应该与准备好的语句一起使用,但我是否将“wins + 1”视为一个字符串,并将其包含在准备好的语句中?

最佳答案

bind_param 的所有参数(第一个除外)必须是通过引用传递的变量,不能只传递字面值,例如 1"anonymous "...

如果要插入的值像这样固定,则根本没有必要使用 bind_param,因为将它们放在查询中是完全安全的:

$stmt = $bd->prepare("INSERT INTO users (id, username, email, password) VALUES (1, 'anonymous',...)");

不过一般情况下你需要将这些参数放入变量中,例如:

$params = Array(1,"anonymous","anonymous",password_hash("noidentity",PASSWORD_BCRYPT));
$stmt->bind_param("isss",$params[0],$params[1],$params[2],$params[3]);

关于php - 我正在尝试从即将弃用的 mysql 语句到 msqli 准备语句,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15006700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com