Converting mysql to $wpdb

时间:2015-12-08 作者:Egert Aia

我试图将其转换为使用$wpdb类。它将返回所有可能的枚举,我不得不使用这个$wpdb,因为mysql\\u查询给了我奇怪的错误(未选择数据库)代码如下

function getEnumValues($table, $field)
  {
    $enum_array = array();
    $query = \'SHOW COLUMNS FROM `\' . $table . \'` LIKE "\' . $field . \'"\';
    $result = mysql_query($query);

    if($result === FALSE) {
    die(mysql_error()); }

    $row = mysql_fetch_row($result);
    preg_match_all(\'/\\\'(.*?)\\\'/\', $row[1], $enum_array);
    if(!empty($enum_array[1]))
    {
      //Shift array keys to match original enumerated index in MySQL (allows for use of index values instead of strings)
      foreach($enum_array[1] as $mkey => $mval) $enum_fields[$mkey+1] = $mval;
      return $enum_fields;
    }
    else
      return array(); // Return an empty array to avoid possible errors/warnings if array is passed to foreach() without first being checked with !empty().
}
之后,我必须使用此代码段来读取它们

<?php
            $enums = getEnumValues("property", "form_field_type");
            foreach($enums as $enum){
                  echo \'<input type = "radio" name = "form_field_type" value = "\'.$enum.\'">\';
                  echo \'<label for = "\'.$enum.\'"> \'.$enum.\'</label><br>\';
            }
?>

2 个回复
SO网友:Felix

您可以查询INFORMATION_SCHEMA 实现同样的目标:

function getEnumValues($table, $field)
  {

    global $wpdb;

    $result = $wpdb->get_row("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = \'" . DB_NAME . "\' AND TABLE_NAME = \'" . $table . "\' AND COLUMN_NAME LIKE \'" . $field . "\'");

    if($result === FALSE) {
      die($wpdb->last_error); 
    }

    // this is the column name
    $result->COLUMN_NAME;

}

SO网友:AhmadKarim

以下是WordPress表字段的解决方案。如果枚举值中有逗号,则会中断

https://gist.github.com/ahmu83/358f8e41e6134013991d9e3cf5edaf8c

相关推荐

如何像使用wpdb一样使用MySQL?

根据标题,我需要使用LIKE操作符以编程方式使用$wpdb删除db上的一行。我想使用$wpdb->delete 消除发生的情况,但我不知道如何设置LIKE 操作员,因为在WHERE 它需要一个指定单个值或另一个数组的数组。我问你这个语法是否正确。$wpdb->delete(\'wp_posts\', array(\'post_type\' => \'flamingo_inbound\', \'post_content\' => \'%\'.$mail.\'%\'));提前感谢