PDO не обрабатывает апостроф в полевых данных даже при использовании подготовленных операторов - PullRequest
0 голосов
/ 13 мая 2019

У меня сложилось впечатление, что подготовленные операторы PDO также делали то, что делал старый MYSQL_REAL_ESCAPE_STRING. Мой код использует подготовленные состояния следующим образом:

 $updatesql = "UPDATE projects
SET title= ?, project_status= ?, bpm= ?, genre= ?, release_genre= ?, 
vocals= ?, lyrics_written= ?, voice_of= ?, start_date= ?, finish_date= ?, 
project_time= ?, file_name= ?, mixed= ?, mastered= ?, mixed_by= ?, 
mastered_by= ?, loudness_level= ?, release_date= ?, artwork_link= ?, 
audio_link= ?, length= ?, lyrics_link= ?, priority= ?, notes= ?, lyrics= ?, 
project_key= ?, featuring= ?, producers= ?  WHERE id= ?
LIMIT 1";



//update record with PDO

$pdo->prepare($updatesql)->execute([$title, $project_status, $bpm, $genre, $release_genre, 
$vocals, $lyrics_written, $voice_of, $start_date, $finish_date, 
$project_time,$file_name, $mixed, $mastered, $mixed_by, 
$mastered_by, $loudness_level, $release_date, $artwork_link, 
$audio_link, $length, $lyrics_link, $priority, $notes, $lyrics, 
$project_key, $featuring, $producers, $id ]); 

пока я не нахожу, отправляет ли форма слово O'riely,это вызывает ошибку MYSQL.

i CANT USE mysqli_real_escape_string, потому что он ожидает подключения mysqli в качестве 1-го параметра и я использую PDO.

Единственное другое решение, которое использует addlashes для всех моих вставок в БД, а затем разбрасывает на всех моихотображать поля данных?Это похоже на то, что мы сделали бы только 10 лет назад.Что мне не хватает, так как это относится к наилучшей практике обработки апострофа и т. Д. При использовании подготовленных заявлений PDO?

ОБНОВЛЕНИЕ:

Моя локальная среда / информация о сервере выглядит следующим образом: Сервер: Локальный хост через сокет UNIX Тип сервера: Версия MySQL Server: 5.7.26-0ubuntu0.18.04.1 - (Ubuntu) Версия протокола: 10 Пользователь: root @ localhost Серверная кодировка: UTF-8 Unicode (utf8) Apache / 2.4.29 (Ubuntu) Версия клиента базы данных: libmysql - mysqlnd 5.0.12-dev - 20150407 - $ Id: 3591daad22de08524295e1bd073aceeff11e6579 $ Расширение PHP: mysqliDocumentation mbstringDocumentation Версия PHP: 7.2.17-0ubuntu0.18.04.1

СООБЩЕНИЕ ОБ ОШИБКЕ:

INSERT INTO projects ( title, project_status, bpm, genre, release_genre, 
vocals, lyrics_written, voice_of, start_date, finish_date, 
project_time, file_name, mixed, mastered, mixed_by, 
mastered_by, loudness_level, release_date, artwork_link, audio_link, 
length, lyrics_link, priority, notes, lyrics, 
project_key,featuring, producers ) 
VALUES ( 'wyatt's', 'Idea Only','99', '99', '99',
'0','0', '', '1969-12-31', '1969-12-31', 
'0', '', '0', '0', '', 
'', '', '1969-12-31', '', '', 
'', '', '3', '', '', 
'','', '')
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's', 'Idea Only','99', '99', '99', '0','0', '', '1969-12-31', '1969-12-31', '0',' at line 7

1 Ответ

2 голосов
/ 13 мая 2019

Это необходимо решить.

PDO обрабатывает апостроф, а также любой другой символ во входных данных, добавляемых в запрос через параметр.

Код, который вы разместили здесь, никогда не выдаст такую ​​ошибку.

Так что ваша проблема в другом месте. Возможно, вы работаете с другой версией этого кода, или в вашем запросе есть какая-то опечатка или что-то еще как глупое. С кем не бывает. Но вы должны быть твердыми со своими знаниями. Если ваш запрос возвращает ошибку, вы должны исследовать эту ошибку, а не обвинять PHP в том, что он не сделал то, что должен. Обычно это так. Так что проблема с вашей стороны, и никто не может сказать вам, какой именно. Вы можете сделать это только сами, усердно отлаживая свой код.

И здесь вы можете узнать, как это сделать. У меня есть статья, которая поможет вам задать вопрос об ответе о переполнении стека или, скорее всего, самостоятельно найти проблему в процессе: Как отладить код PDO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...