可能重复:
PHP PDO语句是否可以接受表名作为参数?
我班上有一个功能,它有点麻烦.这里的功能
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我用以下函数调用该函数:
-> insert('coupons',array('categorie','name','link','code','id'),array('test11','test','test','test','NULL'));
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [HY093]:参数号无效:参数未在第46行的C:\ xampp\htdocs\MYFRAMEWORK\lib\database.class.php中定义
第46行是:
$sql->execute();
Run Code Online (Sandbox Code Playgroud)
所以现在我真的没有看到问题出在哪里.有什么指针吗?
您误解了绑定的使用.您不能使用PDO绑定表名和列名.绑定数据以插入INTO这些列.您需要构造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);
Run Code Online (Sandbox Code Playgroud)
$ placeholders现在看起来像这样:
$placeholders = array(
':column1',
':column2',
...
);
Run Code Online (Sandbox Code Playgroud)
$ bindvalues现在看起来像这样:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
Run Code Online (Sandbox Code Playgroud)
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
Run Code Online (Sandbox Code Playgroud)
这将为您准备一份表格声明:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
Run Code Online (Sandbox Code Playgroud)
然后,您可以执行预准备语句并将$ values作为参数传递.
$sql->execute($bindValues);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2621 次 |
| 最近记录: |