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'のような1つの値を選択しようとすると、...複数の値 "*"を選択しようとすると、クラッシュします??????

4

4 に答える 4

1

私が見つけたユニークな解決策:

LibMySQL.DLL FROM 5.0.51aパッケージをインストールします(最新の5.1.44 MySQLバージョンで動作します)

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

于 2010-03-14T20:54:35.067 に答える
1

わかりました、私は非常に悪いが機能している解決策を持っています:p)

16進エディタでext\php_pdo_mysql.dllを開きます

「83C350」オフセット0x000024d5を検索します(php 5.2.12 vc6で)

83C3"54"に置き換えます

問題は構造体のサイズが悪いことです...(struct pdo_column_data)

libmysql.dllで修正しようとしましたが、php_mysqliがクラッシュします;)

于 2010-03-15T02:30:47.903 に答える
0

ここでもApache2PHP5.2.12 / LibMySQL5.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

...

eip002C249Aでクラッシュ

于 2010-03-14T19:25:51.647 に答える
0

正しい方法は、mysqlmysqliおよびpdo_mysqlphpモジュールを(mysqlソースからの)適切なmysqlヘッダーで再コンパイルすることです。

ただし、適切な開発環境をセットアップするのは困難です(Windows SDK、VC6コマンドライン、および必要なすべてのライブラリ)

実際、プロトコルバージョンがあります(mysqlヘッダー、version.hという名前のファイルで確認できます)。

新しいリリースごとに、EWS-EasyWebServerという名前のWAMPパッケージ用に作成します

于 2010-09-20T00:29:56.927 に答える