PDO wordpress 查询
Posted
技术标签:
【中文标题】PDO wordpress 查询【英文标题】:PDO wordpress query 【发布时间】:2015-12-09 23:27:04 【问题描述】:我一直在努力
错误:SQLSTATE[42000]:语法错误或访问冲突:1064 你 您的 SQL 语法有错误;检查对应的手册 您的 mysql 服务器版本,以便在附近使用正确的语法
请帮忙! =] 我已经检查了 phpmyadmin 中的这个文字查询是否有效。
SELECT *
FROM `wp_customgravityall`
WHERE (`time` >= '2015-09-01 00:00:00' AND `time` <= '2015-09-13 23:59:59')
ORDER BY `wp_customgravityall`.`time` DESC
但是我下面的代码不起作用。
<?php
$servername = "http://www.myhomepagenamethingy.com/";
$username = DB_USER;
$password = DB_PASSWORD;
$dbname = DB_NAME;
$table_name = 'wp_' . 'customgravityall';
$from_date = isset( $_GET['from_date'] ) ? $_GET['from_date'] . " " . "00:00:00" : '';
$to_date = isset( $_GET['to_date'] ) ? $_GET['from_date'] . " " . "23:59:59" : '';
try
$conn = new PDO('mysql:$servername;dbname=$dbname', $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement = $conn->prepare(
"SELECT *
FROM ?
WHERE `time` >= ? AND `time` <= ?
ORDER BY `wp_customgravityall`.`time` DESC"
);
$statement->bindValue(1, $conn->quote($table_name), PDO::PARAM_STR);
$statement->bindValue(2, $conn->quote($from_date), PDO::PARAM_STR);
$statement->bindValue(3, $conn->quote($to_date), PDO::PARAM_STR);
var_dump($statement);
$statement->execute();
catch(PDOException $e)
echo 'PDO ERROR: ' . $e->getMessage();
?>
【问题讨论】:
【参考方案1】:您正在尝试使用FROM ?
绑定表
准备好的语句中的规则是您不能绑定表/列。
您可以选择表名,将变量分配给表名,或者使用安全列表。
将表名设置为变量的示例:
$table = "table_name";
然后
SELECT FROM $table
或在表名周围加上勾号,如果您的表包含 MySQL 会抱怨的字符,例如空格或连字符:
SELECT FROM `$table`
在您的情况下,要使用的变量是$table_name
我发现的另一件事是您在这里使用了单引号:
$conn = new PDO('mysql:$servername;dbname=$dbname', $username, $password);
变量不被单引号解析(除非连接),使用双引号:
$conn = new PDO("mysql:$servername;dbname=$dbname", $username, $password);
但是,您的构造似乎不正确,因此您“可能”必须对其进行调整。
http://php.net/manual/en/pdo.connections.php手册中的示例:
$dbh = new PDO("mysql:host=localhost;dbname=test", $user, $pass);
但是,我可能对此有误,因为我确实相信有几种方法可以构建与 PDO 的连接。
因此将其更改为:
$dbh = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
另外,确保constants 已正确分配。
这些被视为常量而不是字符串:
$username = DB_USER;
$password = DB_PASSWORD;
$dbname = DB_NAME;
如果这些不是预定义的常量,则需要将它们括在引号中:
$username = "DB_USER";
$password = "DB_PASSWORD";
$dbname = "DB_NAME";
然后这个:
$servername = "http://www.myhomepagenamethingy.com/";
这很可能是 localhost
设置在引号中,或者是 IP 地址,具体取决于您的系统设置方式,并且是通常的设置,而不是 URL。如果我在回答中已经给你的内容对你不适用,你需要找出你的主机设置是什么。
【讨论】:
也感谢您发现报价。这绝对解决了语法错误。尽管我已经确认了我的数据库名称,但我收到了一个没有选择数据库的错误。是因为数据库主机名不正确吗? @ahnbizcad 不客气。发现您的连接方法后,我对答案进行了一些编辑。重新加载它以在显示 “但是,您的构造似乎关闭,因此您“可能”必须对其进行调整.....” - 它是缺少的“host=”。另请参阅有关它的手册。还要检查你的常量。 啊,即使在阅读之后,host=
部分也完全绕过了我的视觉和心理雷达。始终是您认为不是问题的事情:p 现在我只需要授予我指定的用户名的权限。 =]
我真的不赞成。哎呀,一些可怜的混蛋只是喜欢过着悲惨的生活。而且那个可怜的混蛋的名字毫无意义。
@Fred-ii- 我得到了你的支持,你得到了有史以来最详细的答案!【参考方案2】:
找到我的解决方案:
找到的解决方案是更改连接cms与数据库的文件中的用户名和密码,我突然看到它可能是带有点的用户名或同一个域名。
直至得出结论的流程步骤
在 Wordpress 中,我遇到了 mysqli 和 PDO 之间的问题。 我用命令 yum update & yum upgrade, no centos 解决了它,他给了我以下更新:
==================================================
==============================
Package Arch Version Repository Size
==================================================
==============================
Installing:
lsphp73-mysqlnd x86_64 7.3.15-1.el7 litespeed 132k
替换 lsphp73-mysqlnd.x86_64 7.3.14-1.el7 更新: lsphp73 x86_64 7.3.15-1.el7 litespeed 5.0 M lsphp73-bcmath x86_64 7.3.15-1.el7 litespeed 27 k lsphp73-common x86_64 7.3.15-1.el7 litespeed 650 k lsphp73-gd x86_64 7.3.15-1.el7 litespeed 114 k lsphp73-imap x86_64 7.3.15-1.el7 litespeed 32k lsphp73-mbstring x86_64 7.3.15-1.el7 litespeed 559 k lsphp73-opcache x86_64 7.3.15-1.el7 litespeed 191 k lsphp73-pdo x86_64 7.3.15-1.el7 litespeed 67 k lsphp73-process x86_64 7.3.15-1.el7 litespeed 29 k lsphp73-soap x86_64 7.3.15-1.el7 litespeed 120 k lsphp73-xml x86_64 7.3.15-1.el7 litespeed 126 k openlitespeed x86_64 1.6.9-1.el7 litespeed 37 M
交易摘要 ==================================================== =============================== 安装 1 个软件包 升级12个包
总下载大小:44 M 下载包: 没有可用于 litespeed 的 Presto 元数据
总计 13 MB/秒 | 44 MB 00:03
除了我的 fastcgi_pass unix: /var/php-nginx/15822663384347.sock/socket;
这引起了冲突。
但还是没有解决问题。
【讨论】:
以上是关于PDO wordpress 查询的主要内容,如果未能解决你的问题,请参考以下文章
优化 WordPress 插件“更好的 WordPress 最近评论”中的慢查询
在 Wordpress 博客之外查询 Wordpress 数据库以返回最新的博客链接,摘录