запросить проблему с текстом с одинарной кавычкой - PullRequest
1 голос
/ 29 августа 2011

Мне нужно сделать этот запрос:

SELECT * FROM brands WHERE brand =`l'artigiano italiano`

Должно быть довольно просто, но это не работает. Как и все мои запросы, я пытаюсь выполнить его с помощью следующего кода

$myDB = Database::getConnection($target='....',$key='....');

$sqlLogo = 'SELECT * FROM brands WHERE brand =`' . $brand->merk . '`';
$resultLogo = $myDB->query($sqlLogo);

Когда я открываю страницу, я получаю следующую ошибку

PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'l'artigiano italiano' in 'where clause': SELECT * FROM brands WHERE brand =`l'artigiano italiano`; Array ( ) in merken_admin_settings() (line 23 of /home/mediaspe/domains/mediaspex.be/public_html/juniorsteps/sites/all/modules/merken/merken.admin.inc)

Я пытался использовать

WHERE brand = "..."

и

WHERE brand = `...`

но оба не работали.

Есть предложения о возможной причине? Я сейчас слепо смотрю на код.

Ответы [ 5 ]

4 голосов
/ 29 августа 2011

Вам следует избегать всего, что вы встраиваете в SQL-запрос. Поскольку вы используете PDO, вы должны сделать это с $myDB->quote():

$sqlLogo = "SELECT * FROM brands WHERE brand = '" . $myDB->quote($brand->merk) . "'";

Вы можете использовать как двойные кавычки ("), так и одинарные кавычки (') для заключения значений, но не кавычки (`).

Еще лучше использовать подготовленные заявления :

$stmt = $myDB->prepare("SELECT * FROM brands WHERE brand = :brand");
$resultLogo = $stmt->execute(array('brand' => $brand->merk));

Таким образом, вам не нужно заботиться о побеге.

0 голосов
/ 30 августа 2011

Похоже, вы используете Drupal. Если это так (я предполагаю, что так, как вы получаете соединение с базой данных и, очевидно, тег), вы должны выполнить свой запрос следующим образом:

$result = db_query('SELECT * FROM {brands} WHERE brand = :brand', array(':brand' => $brand));

Вот и все. Примечание:

  • Использование db_query (), которая будет вызывать Database :: getConnection () внутри. Вам нужно только вызвать Database :: getConnection () самостоятельно, если вы хотите подключиться к подключению, отличному от подключения по умолчанию.

  • Используйте фигурные скобки uf ({}) для таблиц, управляемых Drupal (что означает, что таблицы установлены через hook_schema () вашего модуля). Если это внешняя таблица, не связанная с установкой Drupal, она вам не понадобится. Фигурные скобки гарантируют, что правильный префикс имени таблицы будет вставлен в том случае, если для установки drupal был настроен один из них (например, при выполнении тестов!)

  • Вы можете использовать: синтаксис заполнителя для динамических значений и напрямую указать значение во втором аргументе db_query () (или $ myMD-> query (), это тот же интерфейс).

0 голосов
/ 29 августа 2011

Простое экранирование одинарной кавычки может помочь, но попробуйте подготовленные операторы PDO, они также помогут вам с безопасностью (как уже обсуждалось здесь )
Вы можете сделать это так:

$brand = "l'artigiano italiano";
$stmt = $db->prepare('SELECT * FROM brands WHERE brand = :brand');
$stmt->execute( array(':brand' => $brand) );
0 голосов
/ 29 августа 2011

Хотя все остальные ответы действительны для обычных функций mysql_ *, если вы используете PDO, вам следует воспользоваться подготовленными утверждениями .Они были сделаны именно для этой цели.

0 голосов
/ 29 августа 2011

Вы пытались избежать одиночной кавычки?

"l\'artigiano italiano"

MySQL String Синтаксис

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