1

为什么这个 pdo::mysql 代码在 Windows 上崩溃???

<?php
$username = "root";
$password = "";

try {
    $dsn = "mysql:host=localhost;dbname=employees";
    $dbh = new PDO($dsn, $username, $password);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

echo "Connected to database<br />" ;

$dbh->exec("DROP TABLE IF EXISTS vCard;");
$dbh->exec("DROP TABLE IF EXISTS emp;");

$table = "CREATE TABLE vCard(
    id INT(4) NOT NULL PRIMARY KEY, 
    firstName VARCHAR (255), 
    lastName VARCHAR (255), 
    office VARCHAR (255), 
    homePh VARCHAR (13), 
    mobilePh VARCHAR (13))";

$dbh->exec($table);

$dbh->beginTransaction();

$dbh->exec("INSERT INTO vCard(id, firstName, lastName, office, homePh, mobilePh)
    VALUES (4834, 'Randy', 'Lewis', 'SR. Front End Developer', '631-842-3375', '917-435-2245');");

$dbh->exec("INSERT INTO vCard(id, firstName, lastName, office, homePh, mobilePh)    
    VALUES (0766, 'Frank', 'LaGuy', 'Graphic Designer', '631-789-8244', '917-324-9897');");

$dbh->exec("INSERT INTO vCard(id, firstName, lastName, office, homePh, mobilePh)    
    VALUES (6684, 'Donnie', 'Dolemite', 'COO', '631-789-9482', '917-234-1222');");

$dbh->exec("INSERT INTO vCard(id, firstName, lastName, office, homePh, mobilePh)    
    VALUES (8569, '', 'McLovin', 'Actor', '631-842-9786', '917-987-8944');");

$dbh->commit();

echo "Data entered successfully<br/><br/>";

    $sql = "SELECT * FROM vCard"; // WHERE firstName = 'Donnie'";

    $results = $dbh->query($sql);

    foreach ($results as $id){
        echo "SSN: ". $id['id']." ";
        echo "First Name: ". $id['firstName']." ";
        echo "Last Name: ". $id['lastName']."<br/>";
    }

}   
catch (PDOException $e) {
    echo "Failed: " . $e->getMessage();
    $dbh->rollback();
}   

?>

基本上这行代码是触发 Apache 崩溃的原因。

    $sql = "SELECT * FROM vCard"; 

如果我尝试选择一个值,例如“id”,它会......当我尝试选择多个值“*”时它会崩溃??????

4

4 回答 4

1

好的,我有一个非常糟糕但有效的解决方案:p)

使用十六进制编辑器打开 ext\php_pdo_mysql.dll

搜索“83 C3 50”偏移量 0x000024d5(在 php 5.2.12 vc6 中)

替换为 83 C3 "54"

问题是结构大小不好......(struct pdo_column_data)

我试图在 libmysql.dll 中修复它,但崩溃 php_mysqli ;)

于 2010-03-15T02:30:47.903 回答
1

我发现的独特解决方案:

从 5.0.51a 包安装 LibMySQL.DLL(使用最新的 5.1.44 MySQL 版本)

http://www.netfulvpc.fr/files/libmysql_dll.zip

于 2010-03-14T20:54:35.067 回答
0

此处与 Apache2 PHP 5.2.12 / LibMySQL 5.1.44 和 5.1.42 相同……使用 OllyDBG,我们可以看到崩溃发生在 php_pdo_mysql

在第一列名称分析之后...我在堆栈中看到第一列“ID_Utilisateur”

“ext\pdo_mysql\mysql_statement.c”附近

LibMySQL 是好的(php dir),这里都是 VC6 编译的...

<?php

$dbh = new PDO('mysql:host=127.0.0.1;port=3306;dbname=uba_dev','root','');

echo "ok";
$dbh->exec('SET CHARACTER SET latin1');

echo "ok";
$stmt = $dbh->query("select * from utilisateurs"); <<< CRASH HERE

...

在 eip 002C249A 崩溃

于 2010-03-14T19:25:51.647 回答
0

正确的方法是使用良好的 mysql 标头(来自 mysql 源)重新编译 mysql mysqli 和 pdo_mysql php 模块

但是设置好的开发环境很难(Windows SDK、VC6 命令行和所有需要的库)

事实上,有协议版本(你可以在 mysql 的 headers 中看到一个名为 version.h 的文件)。

我为我的 WAMP 包做这个,命名为 EWS - Easy Web Server,每个新版本

于 2010-09-20T00:29:56.927 回答