PDO #1054 'where 子句中的未知列 'n'
PDO #1054 Unknown column 'n' in 'where clause
我有一个 class 有一个函数,可以从数据库中提取任何数据,无论标识列是什么,基本上看起来像这样
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
提前致谢,
约尔迪
摆脱线
$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;
}
}
我有一个 class 有一个函数,可以从数据库中提取任何数据,无论标识列是什么,基本上看起来像这样
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
提前致谢, 约尔迪
摆脱线
$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;
}
}