我并没有试图使用$wpdb->插入,而是准备。
Insert方法将有一个查询字符串和一个数组,其中包含#个未定义但将为每个查询字符串关键字定义的数据。
例如,“address.insert”查询字符串在处理查询时定义了一个包含3个变量的查询字符串,如owner\\u id、address\\u info、city。
而不是使用$owner\\u id$在$wpdb->prepare部分,我试图传递一个数组,该数组包含下面列出的所有变量。
有人知道通过数组进行准备是否可行吗?当我尝试时,它对我不起作用。
作品
$sql = $wpdb->prepare($this->queryArray[$selectQuery], $owner_id, $address1, $address2, $city, $zip, $country);
正在尝试执行
$sql = $wpdb->prepare($this->queryArray[$selectQuery], $inputArray);
下面是一个示例代码。
public function Insert($selectQuery, $inputArray)
{
try
{
global $wpdb;
$wpdb->show_errors();
$sql = $wpdb->prepare($this->queryArray[$selectQuery], $owner_id, $address1, $address2, $city, $zip, $country);
$result = $wpdb->query($sql);
return $result;
}
catch(Exception $e)
{
echo $e->getMessage();
return -1;
}
}
解决方法:这很好用。
$sql = $wpdb->prepare($this->queryArray[$selectQuery], $inputArray);
最合适的回答,由SO网友:onetrickpony 整理而成
从Codex, prepare()方法的第二个参数:
(int | string | array)要替换为占位符的值。通过以类似sprintf()的方式传递更多参数,可以传递许多值。Alternatively the second argument can be an
array containing the values as in PHP\'s vsprintf() function. 必须注意不要允许用户直接输入此参数,这将允许使用多个占位符对任何查询进行数组操作。值不能已被SQL转义。
因此,只要查询字符串中的“%s”占位符数与数组长度相同,就可以直接传递输入数组。
顺便说一句,在您的代码中$owner_id, $address1, $address2, $city, $zip, $country
变量未定义。你错过了吗extract($inputArray)
?