Проблема с оператором SQL с использованием PHP - PullRequest
0 голосов
/ 22 мая 2009

В настоящее время я пытаюсь получить данные из MYSQL с помощью PHP, и я получаю следующую ошибку:

"Не удалось получить записи: у вас есть ошибка в синтаксисе SQL; проверьте правильность синтаксиса в руководстве, соответствующем версии вашего сервера MySQL, для использования около"% PC4198% ИЛИ oem LIKE% Fluke% "в линия 1 "

Мой оператор SQL выглядит следующим образом:

$sql = "SELECT * FROM account WHERE `NSC ID` LIKE %".$nscid."% OR oem LIKE %".$oem."%";

Любая помощь очень ценится.

Ответы [ 2 ]

10 голосов
/ 22 мая 2009

Ваши строки должны быть указаны:

$sql = "SELECT * FROM account WHERE NSC ID LIKE '%".$nscid."%' OR oem LIKE '%".$oem."%'";

Тем не менее, вам действительно следует рассмотреть возможность использования PDO или ORM.

Edit:

Основной смысл использования PDO заключается в том, чтобы, как сказал Билл, предотвратить внедрение SQL (вызванное объединением, возможно, грязных строк в SQL).

Тот же запрос в стиле PDO будет:

$query = $connection->prepare('SELECT * FROM account WHERE NSCID LIKE :nscid OR oem LIKE :orm');
$query->bindValue(':nscid', '%'.$nscid.'%', PDO::PARAM_STR);
$query->bindValue(':oem', '%'.$oem.'%', PDO::PARAM_STR);

Это еще немного кода, но он защитит вас от большинства (всех?) SQL-инъекций, позволив библиотеке выполнять экранирование.

(Типы параметров для bindValue являются необязательными, но рекомендуется).

1 голос
/ 22 мая 2009

еще лучше, операторы {и} могут позволить вам сделать это

$sql="SELECT * FROM account WHERE NSC ID Like '%{$nscid}%' OR oem LIKE '%{$oem}%'";

вам не нужен {}, если это одна переменная, подобная этой, но если вы используете объект, он вам нужен:

$hi_example="yarg i am a {$person->type}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...