У меня есть класс с функцией, которая будет извлекать любые данные из базы данных, какими бы ни были идентифицирующие столбцы, которые в основном выглядят так
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
Избавиться от линии
$column = implode(', ', $column);
Он заменяет массив строкой, содержащей все имена столбцов, разделенных запятой. затем $column[0]
будет первым символом имени первого столбца вместо имени первого столбца.
Запишите здесь полный запрос .. Чем это проще!
Редактировать:
попробуйте этот код:
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)
Это должно это исправить (см. Также ответ @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;
}
}