我的 PHP 语句的第一部分相应地更新了数据库中的值,但第二部分不再设置 cookie 值,我做错了什么,我知道它是小事:
include("db_connect.php");
session_start();
$input_game = $_POST['game'];
$input_user = $_POST['email'];
//$sql = "UPDATE users_table SET Pref_Game = '" . $input_game . "' WHERE Email='" . $input_user . "'";
$stmt = $conn->prepare("UPDATE users_table SET Pref_Game = ? WHERE Email= ?");
$stmt->bind_param("ss", $input_game, $input_user);
声明的第二部分:
if( $stmt->execute() ) {
$cookie_name2 = "content";
setcookie($cookie_name2,$input_game, time() + (86400 * 30), "/"); // 86400 = 1 day
} else {
//Error
}
有人可以阐明这个问题并将其整合到声明的第二部分中吗?所以它会相应地起作用。
最佳答案
将 execute()
的返回结果包装在条件测试中。 (execute()
成功时返回 TRUE,失败时返回 FALSE
。)
您还可以使用准备好的语句来运行后续查询,例如:
if( $stmt->execute() ) {
$sql="SELECT Pref_Game FROM users_table WHERE Email = ?";
$stmt2 = $conn->prepare($sql);
$stmt2->bind_param("s",$input_user);
$stmt2->execute();
$pref_game = $stmt2->fetchColumn();
setcookie($cookie_name2,$pref_game, time() + (86400 * 30), "/"); // 86400 = 1 day
$stmt2->close();
} else {
//Error
}
注释:
这假设Email
在users_table中是唯一的。此示例代码并未测试 $stmt2->execute
返回是否成功,您可以将其包装在条件测试中,这样我们就不会陷入 fetchColumn。如果查询成功,但未返回行,则
fetchColumn()` 将返回 FALSE。
if( $stmt->execute() ) {
$sql="SELECT Pref_Game FROM users_table WHERE Email = ?";
$stmt2 = $conn->prepare($sql);
$stmt2->bind_param("s",$input_user);
if ( $stmt2->execute() ) {
$pref_game = $stmt2->fetchColumn();
setcookie($cookie_name2,$pref_game, time() + (86400 * 30), "/"); // 86400 = 1 day
} else {
// error executing stmt2
}
} else {
// error executing stmt
}
关于php - SQL 注入(inject)保护...语句的第二部分不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951079/