【发布时间】:2009-10-26 16:50:44
【问题描述】:
我正在考虑更改一些 PHP 代码以使用 PDO 而不是 mysqli 进行数据库访问(因为 PDO 语法对我来说更有意义并且与数据库无关)。为此,我需要在进行转换时同时使用这两种方法。
我的问题是:到目前为止,任何一种方法都会使 Apache 崩溃。
现在我在 Windows XP 和 PHP 版本 5.2.8 中使用 XAMPP。 Mysqli 工作正常,这样也可以:
$dbc = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
echo 'Connected to database';
$sql = "SELECT * FROM `employee`";
但是这一行会使 Apache 崩溃:
$dbc->query($sql);
我不想重做整个 Apache 或 XAMPP 安装,但我希望 PDO 能够正常工作。所以我尝试从here 更新libmysql.dll,正如oddvibes 推荐的here。这使我的简单 PDO 查询工作正常,但随后 mysqli 查询使 Apache 崩溃。
(在那之后我也尝试了更新php_pdo_mysql.dll和php_pdo.dll的建议,但没有效果。)
测试用例
我创建了这个测试脚本来比较 PDO 和 mysqli。对于libmysql.dll 的旧副本,如果$use_pdo 为真,则它会崩溃,如果为假则不会。对于libmysql.dll 的新副本,情况正好相反。
if ($use_pdo){
$dbc = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
echo 'Connected to database<br />';
$sql = "SELECT * FROM `employee`";
$dbc->query($sql);
foreach ($dbc->query($sql) as $row){
echo $row['firstname'] . ' ' . $row['lastname'] . "<br>\n";
}
}
else {
$dbc = @mysqli_connect($hostname, $username, $password, $dbname) OR die('Could not connect to MySQL: ' . mysqli_connect_error());
$sql = "SELECT * FROM `employee`";
$result = @mysqli_query($dbc, $sql) or die(mysqli_error($dbc));
while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
echo $row['firstname'] . ' ' . $row['lastname'] . "<br>\n";
}
}
Apache 需要什么来支持这两种数据库查询方法?
【问题讨论】:
-
崩溃?错误日志中有任何内容吗?
-
“崩溃”究竟是什么意思?
-
“崩溃”表示 Windows 提示“Apache HTTP Server 遇到问题,需要关闭。对于给您带来的不便,我们深表歉意”,页面什么也没有显示。
-
error.log没有显示任何对我来说不寻常的东西——比如“创建子进程”和“启动工作线程”。我认为这是我在更改这些文件后重新启动它的地方。 -
这是您查询的结果吗?也许某些特定于您的员工表?您是否尝试过其他表或带有虚拟数据的简单“testschema”表?