Php PDO#1054未知列';n';在';where子句

Php PDO#1054未知列';n';在';where子句,php,mysql,pdo,where-clause,Php,Mysql,Pdo,Where Clause,我有一个类,它有一个函数,可以从数据库中提取任何数据,不管标识列是什么,基本上如下所示 use Database\DB; class General extends DB { private $fooBar; public function getData($column, $table, $value) { $column = (array) $column; $column = implode(', ', $column);

我有一个类,它有一个函数,可以从数据库中提取任何数据,不管标识列是什么,基本上如下所示

    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]
将是第一个列名的第一个字符,而不是第一个列名。

去掉该行

$column = implode(', ', $column);
它用一个字符串替换数组,该字符串包含所有以逗号分隔的列名。然后,
$column[0]
将是第一个列名的第一个字符,而不是第一个列名。

去掉该行

$column = implode(', ', $column);
它用一个字符串替换数组,该字符串包含所有以逗号分隔的列名。然后,
$column[0]
将是第一个列名的第一个字符,而不是第一个列名。

去掉该行

$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=(数组)$column
$columns=(数组)$column


把你的全部疑问写在这里。。比这容易多了

编辑:

请尝试以下代码:

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=(数组)$column
$columns=(数组)$column


把你的全部疑问写在这里。。比这容易多了

编辑:

请尝试以下代码:

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=(数组)$column
$columns=(数组)$column


把你的全部疑问写在这里。。比这容易多了

编辑:

请尝试以下代码:

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=(数组)$column
$columns=(数组)$column

这应该可以解决问题(请参见@Barmar answer):

(注意内爆语句中的差异)

这应该可以解决问题(请参见@Barmar answer):

(注意内爆语句中的差异)

这应该可以解决问题(请参见@Barmar answer):

(注意内爆语句中的差异)

这应该可以解决问题(请参见@Barmar answer):

(注意内爆语句中的差异)


@JordiPrevost var转储查询本身?它给出了什么?没有返回查询,哈哈。它现在给了我一个空的而不是空的。我的意思是完整的原始查询是什么样子的?因为可能它返回NULL或空,因为没有要返回的行(匹配)?@JordiPrevost var转储查询本身?它给出了什么?没有返回查询,哈哈。它现在给了我一个空的而不是空的。我的意思是完整的原始查询是什么样子的?因为可能它返回NULL或空,因为没有要返回的行(匹配)?@JordiPrevost var转储查询本身?它给出了什么?没有返回查询,哈哈。它现在给了我一个空的而不是空的。我的意思是完整的原始查询是什么样子的?因为可能它返回NULL或空,因为没有要返回的行(匹配)?@JordiPrevost var转储查询本身?它给出了什么?没有返回查询,哈哈。它现在给了我一个空的而不是空的。我的意思是完整的原始查询是什么样子的?因为它可能返回NULL或空,因为没有要返回的行(匹配的行)?