我有一个简单的表单需要textarea中的一个停靠列表,并在右侧返回每个停止的id。这是我在localhost上的截图...我有相同的表名,列名,localhost和live服务器上的记录数。 这是在实时服务器上具有相同查询的同一页面的屏幕截图...
这是我在两个页面上使用的代码
$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
答案 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()
返回一个由查询返回的所有行组成的数组。从这个事实我们可以得出两个结论:
来源:PDO Tutorial
答案 3 :(得分:0)
我修复了错误。我已经在另一篇文章中详细解答了这个帖子,我正在链接到HERE的帖子。谢谢大家的时间和答案