Php 绑定值时出现的问题
我第一次用准备好的语句工作,但我被这个错误卡住了。由于某些原因,我无法将绑定类型作为参数传递 我的代码:Php 绑定值时出现的问题,php,mysqli,Php,Mysqli,我第一次用准备好的语句工作,但我被这个错误卡住了。由于某些原因,我无法将绑定类型作为参数传递 我的代码: function insert($table, $columns = array(), $bindTypes, $values = array()) { // Store connection. $connection = connection(); $columnValues = null; $index = 1; // Prepare unassigned value string.
function insert($table, $columns = array(), $bindTypes, $values = array()) {
// Store connection.
$connection = connection();
$columnValues = null;
$index = 1;
// Prepare unassigned value string.
foreach ($columns as $column) {
$columnValues .= '?';
if ($index < count($columns)) {
$columnValues .= ', ';
}
$index++;
}
// Debugg purpose: echo query example:
echo "INSERT INTO {$table} (" . implode(', ', $columns) . ") VALUES ({$columnValues})";
// Prepare statement.
$statement = $connection->prepare("INSERT INTO {$table} (" . implode(', ', $columns) . ") VALUES ({$columnValues})");
$statement->bind_param($bindTypes, implode(', ', $values));
}
insert('test', array('name'), 'i', array(1));
函数插入($table,$columns=array(),$bindTypes,$values=array()){
//存储连接。
$connection=connection();
$columnValues=null;
$index=1;
//准备未赋值字符串。
foreach($columns作为$column){
$columnValues.='?';
如果($indexprepare(“插入到{$table}(“.infrade(',',$columns)。”)值({$columnValues})”);
$statement->bind_param($bindTypes,introde(',',$values));
}
插入('test',数组('name'),'i',数组(1));
如果我回显查询示例,我会得到“插入到测试(名称)值(?)”
请原谅我,我仍然是一个学习能手。我看到你用MySQLi标记了你的帖子,我很确定这就是问题所在 取而代之的是,我在这个问题上使用PDO,因为它以一种更简单的方式允许可变数量的参数。允许您执行与PHP手册中类似的操作。让我们看看: bool mysqli_stmt::bind_参数(字符串$types,mixed&$var1[,mixed&$…]) 换句话说,第一个参数确定数据类型,并从第二个参数开始将值作为单个参数传递。但是,您有:
$statement->bind_param($bindTypes, implode(', ', $values));
您将所有的单个值组合成一个逗号分隔的字符串,这一点没有什么意义,尤其是如果您认为函数希望通过<强>引用 .< /P> < P> PHP > 5.6版本:
function insert($connection, $table, $columns, $values) {
$columnStr = "`".implode("`,`",$columns);
$valueStr = str_repeat('?,', count($values) - 1) . '?';
$types = str_repeat('s', count($values));
$statement = $connection->prepare("INSERT INTO `$table` ($columnStr) VALUES ($valueStr)");
$statement->bind_param($types, ...$values);
$statement->execute();
}
insert($conn, 'test', ['name'], [1]);
请注意,永远不要从用户输入中提取表名或列名,而应始终在脚本中硬编码它们。这使得插入的独特功能毫无用处。谢谢。我现在明白了问题所在,但我无法想出解决方案。@Dennicastelijns您使用的PHP版本是什么?@YourCommonSense 5.5。9@DennisCastelijns真遗憾。不管是5.6版,都会有一个简单的解决方案,我对mysqli不太熟悉。如果无法多次调用
bind_param()
,则可能必须使用call_user\u func\u array()
,这相当难看。注意:由于语法原因,需要使用PHP/5.6+。