如何使用$wpdb->Prepare转义SQL查询中的百分号(%)?

时间:2021-09-14 作者:Joy Kumar Bera

我有以下代码

$v12 = \'Milk(45% Fett i.Tr.)\';
$sql = "INSERT INTO diary_data SET v2= \'0.2\', v12=$v12";
$final_sql = $wpdb->prepare( $sql, \'\');
但在回应之后$final_sql 包含

INSERT INTO diary_data SET v2= \'0.2\', v12=Milk(450.000000ett i.Tr.)
这不是正确的sql查询。

我尝试添加额外的% 在里面$v12 喜欢$v12 = \'Milk(45%% Fett i.Tr.)\' 这让我

INSERT INTO diary_data SET v2= \'0.2\', v12=Milk(45{d4f1e7f215677fb8d2f6ba2935ed4333e2d215f3645e54e0669d65c881e609cd} Fett i.Tr.)
我还尝试使用$v12 = $wpdb->_real_escape(\'Milk(45% Fett i.Tr.)\') 但现在运气好了。

有人知道如何解决这个问题吗?

1 个回复
SO网友:Tom J Nowell

这是对的错误使用prepare, 该函数用于在查询中安全地插入变量。但是,问题中的代码会绕过安全功能预先执行此操作。

例如。

您所做的:

$unsafesql = "INSERT $dangerousvariable";
$still_unsafe_sql = $wpdb->prepare( $sql, \'\' );
应该是什么:

$safe_sql = $wpdb->prepare( "INSERT %s", $dangerousvariable );