Передача массива в состоянии where в запросе sql с использованием php

0

Я пытаюсь передать массив в sql-запросе.

Массив содержит имена coloumn в качестве индекса, которому они присвоены соответствующие значения, которые я получил с помощью метода GET.

например, я пытаюсь скомпилировать этот код:

$a='email';    
$b=array($a => $_GET['x']);    
$sql="SELECT * FROM users WHERE $b";    
echo $sql;

Результат, который мне нужен:

SELECT * FROM users WHERE email='/*value of $_GET['x']*/'

результат, который я получаю:

SELECT * FROM users where Array

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

Теги:
arrays
get

1 ответ

0
Лучший ответ

Вам нужно манипулировать массивом $b чтобы превратить его в строку после, на данный момент она просто сбрасывает содержимое в своем собственном формате.

Эта версия будет делать то, что вы после...

$b=array($a => $_GET['x']);  
$columns = [];
foreach ( $b as $name => $value )   {
    $columns[] = "$name = '$value'";
}
$sql="SELECT * FROM users WHERE ".implode(" and ", $columns);
echo $sql.PHP_EOL;

Я использовал его and как условие, связывающее несколько столбцов, вы можете изменить это в зависимости от вашего требования.

Эта версия вместо этого использует параметры привязки, вместо этого в месте вставлен держатель места, а затем вам нужно привязать массив $data к подготовленному оператору (как это зависит от используемого вами API). Это безопаснее и гибче (и рекомендуется)...

$b=array($a => $_GET['x']);
$columns = [];
$data = [];
foreach ( $b as $name => $value )   {
    $columns[] = "$name = ?";
    $data[] = $value;
}
$sql="SELECT * FROM users WHERE ".implode(" and ", $columns);
echo $sql.PHP_EOL;
  • 0
    Спасибо :) Просто спас мой день

Ещё вопросы

Сообщество Overcoder
Наверх
Меню