Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该如何在Wordpress中使用准备好的语句和查询中的变量?_Php_Wordpress_Prepared Statement - Fatal编程技术网

Php 我应该如何在Wordpress中使用准备好的语句和查询中的变量?

Php 我应该如何在Wordpress中使用准备好的语句和查询中的变量?,php,wordpress,prepared-statement,Php,Wordpress,Prepared Statement,我目前正在学习Wordpress和PHP,我也在使用WooCommerce。我目前有一个有三个输入字段的表单,我想检查用户输入的订单数据是否正确,以便用户可以进入下一页 我当前的代码是这样的,我不确定我是否走对了方向,有什么帮助吗 if(isset($_POST['submit'])) { global $wpdb; $ordernumber = $_POST['ordernmbr']; $orderfirstname = $_POST['firstname']; $orderpostnumb

我目前正在学习Wordpress和PHP,我也在使用WooCommerce。我目前有一个有三个输入字段的表单,我想检查用户输入的订单数据是否正确,以便用户可以进入下一页

我当前的代码是这样的,我不确定我是否走对了方向,有什么帮助吗

if(isset($_POST['submit'])) {
global $wpdb;

$ordernumber = $_POST['ordernmbr'];
$orderfirstname = $_POST['firstname'];
$orderpostnumber = $_POST['postnmbr'];

$ordernumber = stripslashes_deep($ordernumber);
$orderfirstname = stripslashes_deep($orderfirstname);
$orderpostnumber = stripslashes_deep($orderpostnumber);


$result = $wpdb->get_results($wpdb->prepare( "SELECT * FROM         $wpdb->wp_postmeta
  WHERE post_id = '$ordernumber' AND meta_value = '$orderfirstname'"));

您需要添加查询条件值作为prepare函数参数。就像下面的陈述

$wpdb->prepare( "SELECT * FROM {$wpdb->prefix}postmeta WHERE post_id = %d AND meta_value = %s", $ordernumber, $orderfirstname);
对于字符串值,我们使用%s


对于数值,我们使用%d

您需要添加查询条件值作为准备函数参数。就像下面的陈述

$wpdb->prepare( "SELECT * FROM {$wpdb->prefix}postmeta WHERE post_id = %d AND meta_value = %s", $ordernumber, $orderfirstname);
对于字符串值,我们使用%s


对于数值,我们使用%d

最好的做法是始终使用
prepare
,但它的主要用途是防止SQL注入攻击,并且由于没有来自用户/访问者的输入或他们无法影响查询,因此在当前示例中这不是问题

但正如我之前所说,使用它是最佳实践,一旦你开始使用它,你永远不会停止,因此在你的例子中,你可以这样使用它:

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM %s ORDER BY date_created DESC",$tablename );
$results = $wpdb->get_results( $sql , ARRAY_A );

要了解更多关于如何使用它的信息,请访问始终使用
prepare
是最佳做法,但它的主要用途是防止SQL注入攻击,并且由于没有来自用户/访问者的输入或他们无法影响查询,因此在当前示例中这不是问题

但正如我之前所说,使用它是最佳实践,一旦你开始使用它,你永远不会停止,因此在你的例子中,你可以这样使用它:

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM %s ORDER BY date_created DESC",$tablename );
$results = $wpdb->get_results( $sql , ARRAY_A );

要阅读有关如何使用它的更多信息,请直接阅读,您可以使用prepare:

$sql = 'DELETE FROM `wp_table` WHERE `id_field` = %d';
$wpdb->query($wpdb->prepare($sql, array($_POST['id']))
要知道的好事情:

%d - number
%s - string
%f - float
传递的变量数组按顺序工作,因此如果您有如下查询:

SELECT * FROM `wp_table` WHERE `string_field` = %s AND `id_field` = %d
你会的

array(
    $_POST['string'],
    $_POST['id']
)
如果是删除/更新,请使用查询和准备。如果选择了,请使用“准备并获取结果”

选择:

$sql = 'SELECT * FROM `wp_table` WHERE `id` = %d';
$sql = $wpdb->prepare($sql, array($_POST['id']));
$res = $wpdb->get_results($sql);

您可以使用准备:

$sql = 'DELETE FROM `wp_table` WHERE `id_field` = %d';
$wpdb->query($wpdb->prepare($sql, array($_POST['id']))
要知道的好事情:

%d - number
%s - string
%f - float
传递的变量数组按顺序工作,因此如果您有如下查询:

SELECT * FROM `wp_table` WHERE `string_field` = %s AND `id_field` = %d
你会的

array(
    $_POST['string'],
    $_POST['id']
)
如果是删除/更新,请使用查询和准备。如果选择了,请使用“准备并获取结果”

选择:

$sql = 'SELECT * FROM `wp_table` WHERE `id` = %d';
$sql = $wpdb->prepare($sql, array($_POST['id']));
$res = $wpdb->get_results($sql);

如果查询中有您将在execute上替换的参数,则只有准备查询的任何一点。您正在连接值,即使在
MYSQLI\uucode>或
PDO
API中使用,这都是非常不安全的。只有当查询包含您将在执行时替换的参数时,才需要准备查询。您正在连接值,即使在最后的select语句中的
MYSQLI\ucode>或
PDO
API'中使用,这也是非常不安全的。如果我已将$\u POST数据存储到变量中,我是否可以在数组中使用这些值,而不会在以后造成任何问题?@Puppe yes,$_的帖子只是为了举例:)我是新来的,非常感谢!在最后的select语句中,如果我已将$\u POST数据存储到变量中,我是否可以在数组中使用这些数据,而不会在以后引起任何问题?@Puppe是的,该$\u POST只是为了示例:)只是确保我是超级新手,非常感谢!