我有以下代码
$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.)\')
但现在运气好了。
有人知道如何解决这个问题吗?
SO网友:Tom J Nowell
这是对的错误使用prepare
, 该函数用于在查询中安全地插入变量。但是,问题中的代码会绕过安全功能预先执行此操作。
例如。
您所做的:
$unsafesql = "INSERT $dangerousvariable";
$still_unsafe_sql = $wpdb->prepare( $sql, \'\' );
应该是什么:
$safe_sql = $wpdb->prepare( "INSERT %s", $dangerousvariable );