PDO # 1054 Неизвестный столбец ‘n’ в ‘предложении where

У меня есть класс с функцией, которая будет извлекать любые данные из базы данных, какими бы ни были идентифицирующие столбцы, которые в основном выглядят так

    use Database\DB;

class General extends DB
{
private $fooBar;

public function getData($column, $table, $value) {
$column = (array) $column;
$column = implode(', ', $column);
$test = $this->query("SELECT `$column` FROM `$table` WHERE $column[0] = :value", array("value" => $value));
}

}

и выполняется следующим образом:

return $this->general->getData(['name'], 'people', 'John Anderson');

Тем не менее, я получаю сообщение об ошибке, которое говорит мне, что существует несуществующий вход столбца со значением ‘n’ (который является первым символом имени столбца, независимо от значения имени столбца)

Полная ошибка;

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'n' in 'where clause'' in a\long\path\DB.class.php on line 50

PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'n' in 'where clause' in a\long\path\DB.class.php on line 50

Заранее спасибо,
Jordi

0

Решение

Избавиться от линии

$column = implode(', ', $column);

Он заменяет массив строкой, содержащей все имена столбцов, разделенных запятой. затем $column[0] будет первым символом имени первого столбца вместо имени первого столбца.

3

Другие решения

Запишите здесь полный запрос .. Чем это проще!

Редактировать:

попробуйте этот код:

use Database\DB;

class General extends DB
{
private $fooBar;

public function getData($column, $table, $value) {
$columns = (array) $column;
$column = implode(', ', $columns);
$test = $this->query("SELECT `$column` FROM `$table` WHERE $columns[0] = :value", array("value" => $value));
}

}

Я изменил следующее:
$column = (array) $column; в $columns = (array) $column;

А также

SELECT `$column` FROM `$table` WHERE $column[0] = :value", array("value" => $value)

в

SELECT `$column` FROM `$table` WHERE $columns[0] = :value", array("value" => $value)
0

Это должно это исправить (см. Также ответ @Barmar):

(Обратите внимание на разницу в заявлении взрыва).

use Database\DB;

class General extends DB
{
private $fooBar;

public function getData($column, $table, $value) {
$column = (array) $column;
$whereCol = $column[0];
$column = implode('`, `', $column);
$test = $this->query("SELECT `$column` FROM `$table` WHERE $whereCol = :value", array("value" => $value));

return $test;
}

}
0
По вопросам рекламы [email protected]