2016-07-27 6 views
-1

Когда я пытаюсь сделать это:ошибка синтаксиса MySql при попытке вставить сериализованную массив

$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: {я: 0; s: 76: \» http://www.example.com/wp-content/uploads/2016/07/Abc.jpg " в строке 1

Я м уверен, что это для serialize($images_array), потому что когда я удалить его и другие значения будут записаны в базу данных.
мой массив содержит ссылки изображений.

+1

узнать о подготовленных заявлениях – Jens

+0

Или, по крайней мере, избежать ваших данных – Kickstart

+1

узнать также, чтобы сделать свою собственную простую отладку. То, что глаза для – RiggsFolly

ответ

1

Проверить здесь у вас есть дополнительные одинарные кавычки '

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

Измените запрос на это есть дополнительный «» в запросе сделать это так,

». 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 .= ")"; 
1

Вместо того, чтобы использовать прямые значения подстановки, вы можете использовать ниже методы, чтобы избежать SQL Injection

Надеется, что это решит вашу проблему

Вы в основном есть два варианта для достижения этой цели.:

Использование 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?

Смежные вопросы