MySQL返回localhost与live服务器上不同行数的相同代码

时间:2016-06-07 07:15:07

标签: php mysql pdo

我有一个简单的表单需要textarea中的一个停靠列表,并在右侧返回每个停止的id。这是我在localhost上的截图...我有相同的表名,列名,localhost和live服务器上的记录数。 My page on localhost 这是在实时服务器上具有相同查询的同一页面的屏幕截图... My page on live server

这是我在两个页面上使用的代码

$conn = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass);
                if(isset($_POST["busnumber"], $_POST["busroute"])){

                    $stops = explode(PHP_EOL, $_POST["busroute"]);
                    $sql = 'SELECT * FROM stops WHERE stop_name LIKE :stop';
                    $statement = $conn->prepare($sql);
                    $statement->setFetchMode(PDO::FETCH_ASSOC);
                    foreach($stops as $stop){
                        $statement->bindValue(':stop', $stop);
                        $statement->execute();
                        $results = $statement->fetchAll();
                        foreach($results as $result){
                            echo $result['stop_id'].' '.$result['stop_name']."</br>";
                        }

                    }
                }

如您所见,它仅返回实时服务器上最后一行的ID。有人可以告诉我这是怎么可能的,我错过了什么?

编辑1

注意当我反转在文本区域中输入的数据时会发生什么 localhost现在显示两个ID The localhost after reversing the rows

猜猜倒车后服务器显示的是什么?只有最后一行! What server shows after reversing the rows

4 个答案:

答案 0 :(得分:1)

您不需要setFetchMode()。在我使用PDO的时候,我总是使用bindParam()和fetch()以及最默认的PDO设置获得最佳结果,这意味着只需将errormode设置为exception,将charset设置为utf8,如下所示: / p>

 try
    {
        $con = new PDO("mysql:host=".$host.";dbname=".$db_name, $user, $password);
    }
    catch(PDOException $e){
        die("ERROR ". $e->getMessage());
    }

    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $con->exec("SET NAMES utf8");

获取这样的结果

while($r = $statement->fetch())
{
    echo $r['id'];
}

当有人使用不同的设置时,我发现他们已经遇到了问题。

或许试试这个。

答案 1 :(得分:0)

这很简单。如果您有访问权限,请通过phpmyadmin检查您的实时数据库,并从phpmyadmin运行您的查询,就像您从PHP代码运行它一样。可能是你对mysql或php有一些限制。并且还检查localhost上的db版本以及php版本。让我知道phpmyadmin查询的结果谢谢!

答案 2 :(得分:0)

猜测问题。我真的不认为这个答案是否正确。所以请提前原谅我。

PDOStatement::fetchAll()返回一个由查询返回的所有行组成的数组。从这个事实我们可以得出两个结论:

  1. 如果选择了多行,则不应使用此功能。在 这种情况常规使用循环ave来获取行,获取行 一个接一个,而不是一次将它们全部放入阵列中。 “许多” 意味着比平均网页更适合显示。
  2. 此功能主要用于现代Web应用程序 在提取过程中不会立即输出数据,而是通过它 到模板。
  3.   

    来源:PDO Tutorial

答案 3 :(得分:0)

我修复了错误。我已经在另一篇文章中详细解答了这个帖子,我正在链接到HERE的帖子。谢谢大家的时间和答案