-4

我正在尝试使用 MySQLi 创建我的第一个准备好的语句,因为我知道我执行查询的方式对 SQL 注入是开放的。

我真的不明白其中的 bind_param 和 bind_result 部分。有人可以以最愚蠢的方式向我解释这一点。

这是我的有效查询。

$sql = "UPDATE formdata SET name = '$varName', email = '$varEmail', address = '$varAddress', city = '$varCity', state = '$varState', zip = '$varZip', submitDate  = '$varDate' WHERE promoCode = '$varPromo'";
$mysqli->query($sql);

这是我对准备好的声明的尝试。

$query = "UPDATE formdata SET name = ?, email = ?, address = ?, city = ?, state = ?, zip = ?, submitDate  = ? WHERE promoCode = '$varPromo'";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $varName, $varName, $varEmail, $varAddress, $varCity, $varState, $varZip, $varDate);
$stmt->execute();
$stmt->bind_result($varName, $varName, $varEmail, $varAddress, $varCity, $varState, $varZip, $varDate);
$stmt->fetch();

header("location: index.php?success=1");
exit();
4

1 回答 1

1

一些错误消息信息会有所帮助,但是,我应该指出一些事情。

对于初学者,在bind_param()第一个参数中指示正在传递的信息(字符串、整数等),并且您必须按照列出参数的顺序指定每条信息。例如,如果你有两个字符串和两个整数,你会输入:

$stmt->bind_param("ssii", $str1, $str2, $int1, $int2);

此外,您还有一个变量,您在和$varName中使用了两次。最佳做法是为每条信息使用不同的变量名称。但是,在这种情况下,由于您正在执行一条语句,您只会获得受影响的行数,因此不要使用bind_param()bind_result()UPDATE$stmt->bind_result(...);echo $stmt->affected_rows;

select 语句将是一个完全不同的场景,在这种情况下,您会将结果信息绑定到变量。但是,您应该查看上面发布的教程 hakre。他们有很多体面的例子,将帮助你开始编写自己准备好的陈述并获得结果。

于 2013-10-18T19:48:32.463 回答