2016-07-27 88 views
-1

当我试图做这个MySQL语法错误试图插入序列化阵列

您的SQL语法错误;检查手册该 对应于你的MySQL服务器版本的正确的语法使用 附近 “一个:33:{I 0,S:76:\” http://www.example.com/wp-content/uploads/2016/07/Abc.jpg ' 位于第1行

I'敢肯定它是serialize($images_array)因为当我将其删除其他值会被插入到数据库中。
我的数组包含图片的链接。

+1

了解准备语句 – Jens

+0

或者至少是逃不过你的数据 – Kickstart

+1

也学会做自己的简单的调试。那是什么眼睛 – RiggsFolly

回答

1

入住这里,你有额外的单引号'

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

您的查询更改为这有一个额外的“”在您的查询使它像这样,

“”。序列化($ 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 .= ")"; 
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?