【问题标题】:MySql syntax error while trying to insert serialized array尝试插入序列化数组时出现 MySql 语法错误
【发布时间】:2016-07-27 11:41:18
【问题描述】:

当我尝试这样做时:

$query  = "INSERT INTO news ( ";
            $query .= "page_link,title,content,images,date";
            $query .= ") VALUES ( ";
            $query .= "'{$page_link}','{$title}','{$content}',''" . serialize($images_array) . "'','{$date}'";
            $query .= ")";

我给出这个错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近 'a:33:{i:0;s:76:\"http://www.example.com/wp-content/uploads/2016/07/Abc.jpg' 在第 1 行

我确定它适用于 serialize($images_array),因为当我删除它时,其他值将被插入到数据库中。
我的数组包含图像链接。

【问题讨论】:

  • 了解准备好的语句
  • 或者至少转义你的数据
  • 也学会自己做简单的调试。这就是眼睛的作用
  • 问题解决了吗?

标签: php mysql database serialization


【解决方案1】:

在这里检查你有额外的单引号'

$query .= "'{$page_link}','{$title}','{$content}','" . serialize($images_array) . "','{$date}'";

【讨论】:

    【解决方案2】:

    您可以使用以下方法来避免 sql 注入,而不是使用直接替换值。

    希望这能解决您的问题

    你基本上有两种选择来实现这一点:

    使用 PDO(适用于任何受支持的数据库驱动程序):

    $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
    
    $stmt->execute(array('name' => $name));
    
    foreach ($stmt as $row) {
        // do something with $row
    }
    

    使用 MySQLi(用于 MySQL):

    $stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
    $stmt->bind_param('s', $name);
    
    $stmt->execute();
    
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        // do something with $row
    }
    

    请参考How can I prevent SQL-injection in PHP?

    【讨论】:

      【解决方案3】:

      将您的查询更改为此,您的查询中有一个额外的 '' 使其像这样,

      '" .serialize($images_array) ."'

      $query  = "INSERT INTO news ( ";
                  $query .= "page_link,title,content,images,date";
                  $query .= ") VALUES ( ";
                  $query .= "'{$page_link}','{$title}','{$content}','" . serialize($images_array) . "','{$date}'";
                  $query .= ")";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 2016-08-18
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多