【问题标题】:PDO wordpress queryPDO wordpress 查询
【发布时间】: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();
}
?>

【问题讨论】:

    标签: php database wordpress pdo


    【解决方案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);
    

    但是,您的构造似乎不正确,因此您“可能”必须对其进行调整。

    手册中的示例:

    $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;

    这引起了冲突。

    但还是没有解决问题。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2016-09-27
      • 2014-11-07
      • 2016-03-13
      • 2012-07-25
      • 2012-08-14
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多