MySQL查询没有关于生产的结果,但是在开发方面是好的

时间:2013-04-29 01:05:11

标签: php mysql pdo

在我的开发环境中,我在一个类中有静态函数,我可以检索一个表的数据列表并打印到屏幕。它很棒。这是我的代码:

public static function getList( $numRows=1000000, $order="name ASC" ) {

    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM posttypes ORDER BY " . mysql_real_escape_string($order) . " LIMIT :numRows";
    $stmt = $conn->prepare( $sql );
    $stmt->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
    $stmt->execute();
    $list = array();

    while ( $row = $stmt->fetch() ) {
        $postType = new PostType( $row );
        $list[] = $postType;
    }

    //Now get total number of posts that match criteria
    $sql = "SELECT FOUND_ROWS() AS totalRows";
    $totalRows = $conn->query( $sql )->fetch();
    $conn = null;

    return ( array( "results" => $list, "totalRows" => $totalRows[0] ) );
}

但是,在我的生产环境中,我无法检索任何记录。但是如果我在phpMyAdmin中运行那个确切的查询,我会得到我想要的确切记录。

不确定发生了什么?这是我第一次设置到生产环境。我正在使用Blue Host。

更新: 好吧,我通过删除mysql_real_escape_string修复了它,但是我认为转义字符串更安全,但是这必须返回false并且使SQL语句失败。谢谢大家的帮助。

5 个答案:

答案 0 :(得分:1)

  1. 这是PDO query fails but I can't see any errors. How to get an error message from PDO?
  2. 的副本
  3. 无论如何,这个功能在很多方面都是错误的
    • 从不从应用程序功能连接,但每个应用程序只连接一次 ,然后使用PDO类的单个实例,并将其传递给函数。
    • 1000000行是一种太多的方式。你忘记设置LIMIT的那一刻,你就会杀了你的服务器
    • 无论如何,
    • ASC 不是字符串。这是一个语法关键字。因此,逃避其中的任何角色都是完全没用的。虽然在本地服务器上使用默认凭据它自己连接到服务器并返回相同的字符串,但它在实时服务器上无法连接,因此返回false。 What to do to properly bind a keyword

答案 1 :(得分:0)

首先进行简单测试:

  1. 您的生产sql数据库是否与您的开发数据库匹配?看起来你有phpMyAdmin。
  2. 打开笔记本:从PhpNyAdmin剪切并通过成功查询。将其粘贴到笔记本文件中。

    将生产程序中的查询剪切并粘贴到同一文件中,以验证两个查询是否相同。标点符号错误可能难以理解。

答案 2 :(得分:0)

更新:好的,我通过删除mysql_real_escape_string修复了它,但是我认为转义字符串更安全,但是这必须返回false并且不能使用SQL语句。谢谢大家的帮助。

答案 3 :(得分:0)

以防万一有人遇到这个问题...

从 Xampp 上的开发转移到生产时,我遇到了同样的问题,我从查询中一无所获。事实证明(经过几个小时的挫折),当我将数据库的副本导入 Xampp 时,我的所有表名都已从大写字母开头更改为小写字母。我随后的所有代码都基于此语法,根本无法正常工作。所以 Xampp 是我问题的原因。

我知道我应该首先使用小写,但我在 20 年前第一次开始编码时创建了数据库,并且不知道更好!

答案 4 :(得分:-1)

对我来说听起来像数据库连接问题。也许仔细检查一下你的主机/ un / pw?