可能重复: Can PHP PDO Statements accept the table name as parameter?
我在班上有一个函数,它在做一些麻烦。这里的功能
function insert($table,$column = array(),$value = array())
{
$array1 = implode(",", $column);
$array2 = implode(",", $value);
try
{
$sql = $this->connect->prepare("INSERT INTO :table (:date1) VALUES (:date2)");
$sql->bindParam(':table',$table, PDO::PARAM_STR);
$sql->bindParam(':data1',$array1, PDO::PARAM_STR);
$sql->bindParam(':data2',$array2, PDO::PARAM_STR);
$sql->execute();
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}我称该职能为:
-> insert('coupons',array('categorie','name','link','code','id'),array('test11','test','test','test','NULL'));我得到的错误是:
警告:在第46行的C:\xampp\htdocs\MYFRAMEWORK\lib\database.class.php中没有定义PDOStatement::execute() pdostatement.execute: SQLSTATEHY093:无效的参数号:参数
第46行是:
$sql->execute();所以现在我不太明白问题出在哪里。有什么指示吗?
发布于 2012-11-15 21:32:10
PDO绑定值数据,而不是表名和列名。
你误解了绑定的使用。不能将表名和列名与PDO绑定。将数据绑定到这些列中。您需要构造SQL以包含使用字符串操作的表名和列。
格式化数据
我将您的$column和$value重命名为$column_array,$value_array,以明确它们是什么,并假设每个数组都是一个简单的数组:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);$placeholders现在看起来如下所示:
$placeholders = array(
':column1',
':column2',
...
);$bindvalues现在看起来如下所示:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);建造,准备,执行
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";这将为您提供一份准备好的表格说明:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)然后,您可以执行准备好的语句,并将$values作为参数传递。
$sql->execute($bindValues);注意:
发布于 2012-11-15 20:17:15
查询构造不正确,values缺少围绕'引号的内容。
当你做implode时,array2看起来像,
test1,test,test... //and so on.它需要是‘test 1’,'test',‘test’.以便在Insert查询中正确绑定。
$sql = $this->connect->prepare("INSERT INTO :table (:date1) VALUES (:date2)"); 另外,您还可以在参数名称中输入date1而不是data1和date2而不是data2。
https://stackoverflow.com/questions/13405392
复制相似问题