警告缺少wpdb::prepare()的参数2,在/home/中调用/public\\u html/wp-content/plugins/insert-php-code-snippet/shortcode-handler。php(72):eval()\'d代码位于第22行并已定义
看来人们对prepare
方法应该执行。您为函数提供了一个参数,但它需要多个参数。因此missing argument 2
警告
什么是prepare
那你呢
想象以下查询搜索具有特定标题的帖子:
$wpdb->query( "SELECT * FROM $wpdb->posts WHERE post_title=$title" );
此代码有严重错误。这是非常不安全的。要说明原因,请考虑用户搜索此项:
$title = \'*;SELECT user_password FROM wp_users WHERE username = "admin"\';
$wpdb->query( "SELECT * FROM $wpdb->posts WHERE post_title=$title" );
现在我们有一个SQL注入攻击。
prepare
旨在允许我们插入变量,同时确保查询不受这些类型值的影响。
例如:
$query = $wpdb->prepare(
"SELECT * FROM $wpdb->posts WHERE post_title=%s",
array( $title )
);
$wpdb->query( $query );
现在我们的查询是安全的。您的查询也存在此问题,因为wpdb prepare的使用不正确。因此,以下变量极易受到SQL攻击:
$wpdb->ab_customers
$wpdb->ab_customer_appointments
$wpdb->ab_appointments
$wpdb->ab_staff
$wpdb->users
$currentuserid->ID
这就是为什么所有示例都使用$wpdb->prepare
这就是为什么你需要更多的论据。错误现在我们知道了如何保护查询,这仍然留下了另一个问题:
The query isn\'t valid SQL
您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第1行中使用“a.id=b.customer\\u id join as c on b.appointment\\u id=c.id”的正确语法就是这个as a join
语法有问题,这不是我遇到的问题,似乎是编造出来的。
这是连接的外观:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
有关更多信息,请参阅W3 School,请记住,这不是一个通用的SQL堆栈交换,这里最好不要问像这样的纯SQL问题关于SQL和WPDB的一个注意事项,我有一种压倒性的感觉,这里的原罪是所有这些都可以通过日期归档、作者归档、自定义帖子类型和自定义分类法来完成。
E、 g.如果您为客户约会使用了自定义的帖子类型,并将这些帖子的作者设置为约会所属的用户,那么您将免费获得作者档案,为您提供:
自定义archive-customer_appointment.php
模板存档于example.com/customer_appointment/
, URL可通过配置register_post_type
作者存档,以及通过get_author_link
你可以使用pre_get_posts
要过滤所有内容,以便用户只看到自己的内容,您可以使用WP_Query
以及整个WP_Cache
工具链会自动加速一切,缓存插件和对象插件会突然工作,为您的javascript提供免费的REST API端点,一个用于编辑和管理所有这些数据的免费管理UI