尝试在数据库中添加一些数据,但我无法使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)
但我无法理解它失败的原因。