wpdb prepare不会替换sql查询字符串上的变量

时间:2017-10-27 10:50:37

标签: php mysql wordpress

尝试在数据库中添加一些数据,但我无法使prepare正常工作。

这是代码:

for ( $i = 0; $i < count( $products ); $i++ ) {
        $name = $products[$i]['Name'];
        $sku = $products[$i]['No'];
        $attr1 = $products[$i]['Attributes3'];
        $attr2 = $products[$i]['Attributes4'];
        $price = $products[$i]['Price'];    
        $sql = $wpdb->prepare("INSERT INTO {$wpdb->prefix}products (name,sku,attribute1,attribute2,price) VALUES ('%s', '%s', '%s', '%s', %f) ON DUPLICATE KEY UPDATE name='%s', attribute1='%s', attribute2='%s', price=%f",
            mysql_real_escape_string($name),
            mysql_real_escape_string($sku),
            mysql_real_escape_string($attr1),
            mysql_real_escape_string($attr2),
            $price,
            mysql_real_escape_string($name),
            mysql_real_escape_string($attr1),
            mysql_real_escape_string($attr2),
            $price  
        );
        var_dump($sql);
        $wpdb->query($sql);
    }

我检查过,变量$name$sku等不是空的,但打印的查询字符串就是这个:

string(160) "INSERT INTO wp_products (name,sku,attribute1,attribute2,price) VALUES ('', '', '', '', 0) ON DUPLICATE KEY UPDATE name='', attribute1='', attribute2='', price=0"

我需要函数mysql_real_escape_string,因为有几行包含单引号。

知道查询字符串为什么不替换变量?

修改:mysql_real_escape_string输出。当我var_dump变量$name时,这是输出的示例:string(25) "60's Jacket Blue"mysql_real_escape_string返回bool(false)

但我无法理解它失败的原因。

0 个答案:

没有答案