Я пытаюсь сделать postgresql select query work с php, но не могу пройти синтаксис.
У меня есть переменная и запрос, который возвращает фамилию любого совпадения.
$name = 'Smith';
$query = 'SELECT surname FROM emploee WHERE name= '.$name.';';
$a = pg_query(connect(),$query );
while($row = pg_fetch_array($a)){ echo "Match"; }
Для тех, кто задается вопросом, почему я должен объявлять Смиту как переменную, $ name не всегда = Смит. Значение $ name берется правильно из другого запроса. Однако это не работает. Я прочитал в статье, что я должен использовать pg_query_params(), но не смог заставить это работать.
Ваша помощь будет высоко оценена
Это два метода, которые работали, предложенные Бангом и Фрэнком Хейкенсом соответственно. Поскольку они только прокомментировали, я отправляю его как ответ для тех, кто может прийти в ту же ситуацию. Однако я бы настоятельно рекомендовал им также прочитать комментарии. Я узнал пару вещей на пути, вы могли бы также.
Bang suggestions->
$a = trim($name);
$query = "SELECT surname FROM employee WHERE name= '" . $a . "';";
$result = pg_query(connect(), $query);
while($row = pg_fetch_array($result)){ echo "Match"; }
Предложения Фрэнка Хейкенса ->
$n = trim($name);
$s = trim($surname);
$params = array ($n, $s);
$result = pg_query_params(connect(), 'SELECT office FROM emploee WHERE name = $1 and surname = $2', $params);
while($row = pg_fetch_array($result)){ $k = $row['path']." ".$row['office']; echo $k; }
В обоих случаях я должен использовать trim (не уверен, что это будет ваш случай тоже). Я добавил третий полевой офис, чтобы продемонстрировать, как я могу принять несколько аргументов. Если у кого-то есть другие критики, предложения или решения, будь моим гостем. Я попробую всех и дам вам знать.
Попробуй это:
$query = "SELECT surname FROM emploee WHERE name= '" . $name . "';";
И лучший способ без привязки:
$query = sprintf("SELECT surname FROM emploee WHERE name = '%s'", pg_escape_string($name));
И если вы хотите использовать привязку:
$result = pg_query_params(connect(), 'SELECT surname FROM emploee WHERE name = $1', array($name));
Когда вы получаете результат из другого запроса "Смит", есть пробел.
Чтобы удалить пробел из $name
, вы можете: $name = trim($name);
С помощью этого выше кода вы можете распечатать "соответствие" для каждой записи, соответствующей запросу
$a = trim($name);
$query = "SELECT surname FROM employee WHERE name= '" . $a . "';";
$result = pg_query(connect(), $query);
while($row = pg_fetch_array($result)){ echo "Match"; }
Но, конечно, вам нужно напечатать возвращаемые значения: просто сделайте это echo $row['columnName']
Полная информация здесь: https://w3resource.com/PostgreSQL/select.php