是否可以使用wpdb::prepare
作用
我阅读了文档,并试图找到一些例子,但没有一个对我有帮助。
即使用prepare创建一个表,也无法在Google上为我提供任何有用的示例。
目前,我正在创建如下表:
public function createTableFromFields( $tablename, $fields ) {
//
$wpdb = $this->db;
$tablename = $wpdb->prefix . $tablename;
$sql = \'CREATE TABLE IF NOT EXISTS \' . $tablename . \' (id INT(6) UNSIGNED
AUTO_INCREMENT PRIMARY KEY\';
foreach ( $fields as $field ) {
$sql .= ", $field TEXT";
}
$sql .= \')\';
$result = $wpdb->query( $sql );
return $result;
}
但我学会了
$wpdb->query($sql)
是不安全的,你应该
$wpdb->query(prepare($sql, $args).
那我要放什么
$args
在这里,使用查询格式字符串的SQL代码是什么?
SO网友:Sonali
我在本地尝试过这个,我想里面有多个字段$fields
所以我在数组中添加了它们。
只要看看下面的代码;经测试,效果良好:
add_action(\'your_hook\', \'createTableFromFields\');
function createTableFromFields($tablename)
{
$wpdb = $this->db;
$tablename = $wpdb->prefix . $tablename;
$fields = array(\'PersonID\',\'LastName\');
$sql = \'CREATE TABLE IF NOT EXISTS %s (id INT(6) UNSIGNED
AUTO_INCREMENT PRIMARY KEY\';
$test = array();
foreach ($fields as $field) {
$test[] = $field." TEXT";
}
$t = implode(",", $test);
$sql .= ",%s)";
$result = $wpdb->query($wpdb->prepare(sprintf($sql, $tablename, $t)));
return $result;
}