2013-04-29 71 views
0

在我的开发环境中,我有一个类中的静态函数,其中我可以检索表格数据列表并打印到屏幕上。它效果很好。这是我的代码:MySQL查询没有生产结果,但在开发中没有问题

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中运行精确的查询,我会得到我想要的确切记录。

不确定发生了什么事?这是我第一次设置生产环境。我正在使用蓝色主机。

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

+1

'$ conn->的setAttribute(PDO :: ATTR_EMULATE_PREPARES,FALSE);'(也许这在'php.ini'已配置您的dev的服务器?) – eggyal 2013-04-29 01:12:14

+0

你不能绑定限制,我很确定它会失败。在这两个环境 – ajreal 2013-04-29 01:38:44

+0

@ajreal:它在我的开发环境中工作正常,并且限制似乎可以绑定好。无论如何,我尝试删除绑定,结果仍然相同。 – TimNguyenBSM 2013-04-29 03:48:54

回答

1
  1. 它的PDO query fails but I can't see any errors. How to get an error message from PDO?
  2. 重复此功能是错误的,在多点反正
    • 决不不断从应用功能连接,但连接只有每个应用程序一次,然后使用单一实例的PDO类,将其传递给函数。
    • 1000000行是一个方法太多。当你忘记设置LIMIT时,你会杀死你的服务器
    • ASC不是一个字符串通过任何手段。这是一个语法关键字。因此,逃避任何角色是完全没有用的。尽管在本地服务器上使用默认凭据,它本身连接到服务器并返回相同的字符串,但在活动服务器上它无法连接,因此返回false。 What to do to properly bind a keyword
+0

谢谢你的答案。 – TimNguyenBSM 2013-04-29 14:33:11

0

简单的测试,第一:

  1. 没有您的生产SQL数据库匹配您的发展datatbase?它看起来像你有phpMyAdmin。

打开笔记本:剪下并从PhpNyAdmin中删除成功的查询。将其粘贴到笔记本文件中。

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

-1

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

+0

这里没有连接问题。我没有提及,但应该有的是,我可以从用户界面添加一个记录到表中,我可以使用phpMyAdmin查看表中的记录,但无法获得返回结果。 – TimNguyenBSM 2013-04-29 03:50:38

0

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