尝试插入序列化数组时出现MySql语法错误

时间:2016-07-27 11:41:19

标签: php mysql database serialization

当我试图这样做时:

$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服务器版本,以便使用正确的语法   近   '一个:33:{I 0,S:76:\" http://www.example.com/wp-content/uploads/2016/07/Abc.jpg'   在第1行

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

3 个答案:

答案 0 :(得分:1)

点击此处您有额外的单引号'

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

答案 1 :(得分:1)

您可以使用以下方法来避免使用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?

答案 2 :(得分:0)

将您的查询更改为此内容还有一个额外的''在你的查询中使它像这样,

<强>&#39;&#34; 。序列化($ images_array)。 &#34;&#39;

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