mysql PDO, как связать КАК

В этом запросе

select wrd from tablename WHERE wrd LIKE '$partial%'

Я пытаюсь связать переменную '$partial%' с PDO. Не уверенный, как это работает с % в конце.

Это было бы

select wrd from tablename WHERE wrd LIKE ':partial%'

где :partial связывается с $partial="somet"

или это было бы

select wrd from tablename WHERE wrd LIKE ':partial'

где :partial связывается с $partial="somet%"

или это было бы что-то совершенно различное?

19
задан dmontain 27 April 2010 в 14:40
поделиться

2 ответа

Вы также можете сказать:

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')

, чтобы выполнить соединение строки на конце MySQL, но в этом случае нет особой причины.

Все становится немного сложнее, если частичный wrd , который вы ищете, может сам содержать символ процента или подчеркивания (поскольку они имеют особое значение для оператора LIKE) или обратную косую черту (которую MySQL использует как еще один уровень экранирования в операторе LIKE - неправильно, согласно стандарту ANSI SQL).

Надеюсь, это вас не коснется, но если вам нужно разобраться в этом случае, вот неприятное решение:

$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);
28
ответ дан 30 November 2019 в 03:33
поделиться
$var = "partial%";
$stmt = $dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial");
$stmt->bindParam(":partial", $var);
$stmt->execute(); // or $stmt->execute(array(':partial' => $var)); without 
                  // first calling bindParam()
$rs = $stmt->fetchAll();

Используя параметры вопросительного знака:

$stmt = $dbh->prepare('select wrd from tablename WHERE wrd LIKE ?');
$stmt->execute(array('partial%'));
$rs = $stmt->fetchAll();

http://www.php.net/manual/en /pdo.prepare.php

16
ответ дан 30 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: