MySQL PDO, как связать, как - PullRequest
       11

MySQL PDO, как связать, как

19 голосов
/ 27 апреля 2010

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

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%"

или это будет что-то совершенно другое?

Ответы [ 7 ]

28 голосов
/ 27 апреля 2010

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

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);
15 голосов
/ 27 апреля 2010
$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

0 голосов
/ 23 января 2019

Я думаю, что принятый ответ (@bobince) можно немного упростить.

Вы можете уменьшить его до значения, подобного этому, чтобы обрабатывать подчеркивание, процент и т. Д. В параметре, но при этом сопоставлять запрос LIKE с частичным%:

$stmt = $dbh->prepare("select wrd from tablename WHERE wrd LIKE :partial");
$stmt->execute([":partial" => addcslashes($value, '_%') . "%"]);
$rows = $stmt->fetchAll();
0 голосов
/ 06 марта 2017

Вы можете использовать addcslashes перед подготовленным оператором. Я тестировал на MySQL.

$value = addcslashes($value, '%');
$stmt = $db->prepare('select * from products where description like ?');
$stmt->execute(["$value%"]);
0 голосов
/ 13 февраля 2016

В приведенном ниже коде показаны только первые ключевые слова в базе данных!

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

Попробуйте, если хотите найти все ключевые слова из базы данных

"SELECT wrd FROM tablename WHERE wrd LIKE :partial";
$stmt->execute(array(':partial'=>'%'.$YourVarHere.'%'));
0 голосов
/ 20 августа 2015

Вот как вы должны это сделать

bindValue(':partial', '%' . $_GET['partial'] . '%');

Спасибо,

Qwerty

0 голосов
/ 03 апреля 2014

Кто написал ответ (может быть karim79):

$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();

Большое ему спасибо. Я искал код и видел много примеров, но я не мог решить свою проблему. На этот раз мне удалось это сделать. Я использовал раздел «Использование параметров вопросительного знака:» кода.

Если вы хотите получить значение из переменной, вы можете изменить код на

.
$stmt->execute(array($variable.'%'));

вместо

$stmt->execute(array('partial%'));

Поскольку слово «частичное» указано в ответе и не может быть изменено. Большое спасибо.

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