使用$WPDB创建简单数组以对照用户输入的值进行检查

时间:2021-01-05 作者:Andy Mainwaring

我有一个函数,它根据一个简单的值数组检查输入的值,以确定是否匹配。

function validate_unit_type( $result, $value ) {

    $pattern = ["U" ,"SE" ,"SHOP" ,"OFF" ,"APT" ,"CTGE" ,"DUP" ,"FY" ,"F" ,"HSE" ,"KSK" ,"MSNT" ,"MB" ,"PTHS" ,"RM" ,"SHED" ,"SITE" ,"SL" ,"STU" ,"TNHS" ,"VLLA" ,"WARD"];

    if ( !empty( $value ) && !in_array( $value, $pattern ) ) {
        $result[\'is_valid\'] = false;
        $result[\'message\']  = \'Invalid Unit Type.\';
    }          

    return $result;
}
这很好用。

$pattern中的数组值也保存在MySQL DB表列中,我正试图让wpdb类将这些值读入数组中,以适应函数。

    global $wpdb;
    $results = $wpdb->get_results("SELECT unit_type from wpqi_enum_unit_type", ARRAY_A);
除了添加上述(wpdb)之外,我还需要向函数添加什么才能使其正常工作?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我在试着wpdb 类将这些值读入数组以适合函数

您可以手动循环$results 数组以生成$pattern 数组,但更简单的方法是使用$wpdb->get_col() 获取unit_type 列:

$pattern = $wpdb->get_col( "SELECT unit_type from wpqi_enum_unit_type" );

/* Alternate version (i.e. manually loop through $results):
$pattern = array();

$results = $wpdb->get_results( "SELECT unit_type from wpqi_enum_unit_type" );

foreach ( $results as $row ) {
    $pattern[] = $row->unit_type;
}
*/

附加代码

这只是一个建议:而不是in_array() (英寸validate_unit_type()), 您也可以这样做$wpdb->get_var():

if ( ! empty( $value ) ) {
    // This way, there\'d be no need for the $pattern.
    $count = (int) $wpdb->get_var( $wpdb->prepare( "
        SELECT COUNT(*) from wpqi_enum_unit_type
        WHERE unit_type = %s
        LIMIT 1
    ", $value ) );

    if ( $count < 1 ) {
        $result[\'is_valid\'] = false;
        $result[\'message\']  = \'Invalid Unit Type.\';
    }
}

附加说明

我假设wpqi_ 是表前缀,因此我建议您使用$wpdb->prefix. 例如。

$table = $wpdb->prefix . \'enum_unit_type\';
$pattern = $wpdb->get_col( "SELECT unit_type from $table" );

相关推荐

Functions.php上未定义$_GET和&_REQUEST索引

我最近尝试学习为我的自定义主题创建一个主题选项页面,这是按照stackoverflow和其他资源的教程进行的。但脚本显示错误if ($_GET[\'page\'] == basename(__FILE__)) { if (\'save\' == $_REQUEST[\'formaction\']) { foreach ($options as $value) { if( isset( $_REQUEST[ $value[\'id\']