使用PREPARE从数组创建表

时间:2017-03-01 作者:MattWithAHat

是否可以使用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代码是什么?

1 个回复
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;
}

相关推荐

在WordPress中将MySQL表格元素显示为页面

我正试图建立一个WordPress网站,但我需要一个特定的功能,我还没有找到一个插件。我将要刮网站信息和张贴到数据库的信息(这已经处理)。但是,我想创建一个页面来显示所有信息的索引,然后创建一个唯一的页面来显示每个单独的元素(ddbb表的行)。有什么办法可以做到这一点吗??