Я пытаюсь передать массив в 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
может кто-нибудь помочь мне, как заставить его работать.
Вам нужно манипулировать массивом $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;