是的,$wpdb->更新是足够的保护。您不应逃避或准备数据。
从documentation of wpdb:
data (array) 要更新的数据(列=>值对)。$数据列和$数据值都应为“原始”(都不应为SQL转义)。这意味着,如果使用GET或POST数据,可能需要使用stripslashes(),以避免斜杠在数据库中结束。
作为补充说明,您可以通过在更新调用中包含format和where\\u format来帮助wordpress更好地理解准备数据库的内容。
$uptable = $mydb->update(
\'table\',
$updatevalues,
$where_data,
$data_format, // \'%d\' for numbers, \'%s\' for strings, can be an array
$where_format // Same here
);
Update: In reply to your comment:
这取决于您保存的数据及其用途。
SQL注入之后的下一步是防止XSS攻击。在这里,用户可以将恶意Javascript输入到您的文本字段中,数据库将其保存,然后您的站点碰巧将其显示给其他用户。
虽然在显示数据库中的内容时使用esc\\u html()可以防止这种情况,但最好不要将这些内容放在数据库中!
如果要保存名称或地址等简单字符串,请使用sanitize\\u text\\u field()如果要保存HTML,如文本编辑器中的文本,请使用wp_kpses()
如果要保存需要在URL中使用的内容,请使用sanitize\\u title()Here\'s more info on them. (整篇文章都很好)To include your link, the page of all Data Validation types至于执行此操作的代码,它将如下所示:
$user_value = stripslashes($_POST[\'user_value\']);
$user_value = sanitize_text_field($user_value);
$user_data = array(\'table_column\' => $user_value);
$user_format = array(\'%s\'); // Means $user_value is a string
$where_data = array(\'id\' => 5); // example
$where_format = array(\'%d\'); // Means \'id\' is a number
$mydb->update(
\'table\',
$user_data,
$where_data,
$user_format,
$where_format
);
如果您只希望数据是字母数字,那么可以在stripslashes之后用if(ctype\\u alnum($user\\u value))包装代码。最终,您只需要所需的确切数据,仅此而已。
希望有帮助!