php - SQL 注入(inject)保护...语句的第二部分不起作用

标签 php mysql mysqli

我的 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/

相关文章:

php - 如何使用 mysqli 和 php 使用准备好的语句成功地将信息从表单插入数据库?

php - 从 MySQL INSERT 查询字符串中提取括号内的值

php - mysql使用php安全快速的选择和插入

php - 如何为ajax实时搜索结果设置限制?

php - 编译失败 : POSIX collating elements are not supported

php - fetchColumn() 不将结果保存到变量

php - 我如何弹出一个带有 mysql 数据的 jquery 对话框?

PHP & mySQL 获取最后插入 ID

php - 检查mysql连接是否有效

mysql - 使用 GROUP_CONCAT 检索所有行数据