首页 > 解决方案 > PHP - 将 MySQL 查询从 mysql_query 更改为 PDO 的问题

问题描述

去年我接手了一个网页的支持。这个页面部分仍然是用 mysql_querys 编写的,这就是服务器仍然运行的原因PHP 5.6(这会导致不必要的成本)。为了最终将服务器更改为PHP 7.x,我实际上正在努力将仍然使用的脚本更改mysql_query为 PDO。在部分情况下,这没有任何问题。但是现在经过长时间的错误搜索,其中一个脚本仍然无法工作。所以我希望这个社区中的某个人可以查看脚本并帮助我找到错误。

MySQL 查询肯定是正确的并给出了结果。所以问题一定出在 PDO 语法上。

这是迄今为止使用的脚本(我只简化了输出):

$link = mysql_connect($sHost, $sUser, $sPass);
mysql_select_db($sDBName, $link);
$sql1 = "SELECT * FROM `" . $table . "` WHERE `index` = " . $_REQUEST['id'];
$erg1 = mysql_query($sql1, $link) or die("Fehler: " .mysql_error());
$result1[0] = mysql_fetch_array($erg1);
echo $result1[0]["kreis"];

结果:柏林

这是现在对 PDO 的脚本更改:

if(isset($_GET['id'])) {
  $id = $_GET['id'];
} else {
  die("Bitte eine ?id übergeben");
}

$pdo2 = new PDO(sprintf('mysql:host=%s;dbname=%s', $sHost, $DBName), $sUser, $sPass);
$utf8 = $pdo2->prepare("SET NAMES UTF8");
$result_check = $utf8->execute();

$table = "orte_bb";
$sql1 = "SELECT * FROM `" . $table . "` WHERE `index` = ?";

$statementbb     = $pdo2->prepare($sql1);
$erg1              = $statementbb->execute(array($id));
while  ($result1        = $statementbb->fetch(PDO::FETCH_ASSOC))
{
  echo $result1['kreis'];
} 

结果:空数组

这意味着,PDO$statementbb接缝到文件没有数据集。这个问题,我无法回答我,是,为什么会发生这种情况。

当有人可以看一看并给我一个线索时,我会很高兴。

谢谢 bagira41berl

标签: phpmysqlpdo

解决方案


现在我自己发现了错误(它停留在细节中)。错误在第一个 PDO 行中:

$pdo2 = new PDO(sprintf('mysql:host=%s;dbname=%s', $sHost, $DBName), $sUser, $sPass);

它是用于数据库名称的变量,其中缺少 1 个字母,这并没有脱颖而出。我将此行的语法更正为:

$pdo2 = new PDO(sprintf('mysql:host=%s;dbname=%s', $sHost, $sDBName), $sUser, $sPass);

现在它可以工作了。

最好的问候 baerlinerbaer


推荐阅读