Почему этот код pdo :: mysql падает на Windows? - PullRequest
1 голос
/ 11 августа 2009

Почему происходит сбой этого кода 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 ]

1 голос
/ 14 марта 2010

Уникальное решение, которое я нашел:

Установить пакет LibMySQL.DLL ОТ 5.0.51a (работает с последней версией MySQL 5.1.44)

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

1 голос
/ 15 марта 2010

Хорошо, у меня очень плохое, но работающее решение: p)

Откройте ext \ php_pdo_mysql.dll с помощью Hex Editor

Поиск смещения "83 C3 50" 0x000024d5 (в php 5.2.12 vc6)

Заменить на 83 C3 "54"

Проблема в неправильном размере структуры ... (struct pdo_column_data)

Я пытался исправить это в libmysql.dll, но это сбой php_mysqli;)

0 голосов
/ 20 сентября 2010

Правильный способ - перекомпилировать php-модули mysql и pdo_mysql с хорошими заголовками mysql (из источников mysql)

Но настроить среду хорошего разработчика сложно (Windows SDK, командная строка VC6 и все необходимые библиотеки)

На самом деле, существуют версии протокола (вы можете увидеть в заголовках mysql файл с именем version.h).

Я делаю это для моего пакета WAMP с именем EWS - Easy Web Server, для каждого нового выпуска

0 голосов
/ 14 марта 2010

То же самое здесь с 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...