SQL php: Не удалось найти драйвер [duplicate]

Если оператор PDO возвращает FALSE, это означает, что запрос завершился неудачно. Вы должны установить PDO в режиме надлежащей регистрации ошибок, чтобы знать об ошибке.

Поместите эту строку в свой код сразу после подключения

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

. После получения сообщения об ошибке, вы должны читать и понимать это. Это звучит слишком очевидно, но учащиеся часто упускают из виду чрезвычайную полезность сообщения об ошибке. Однако большую часть времени это объясняет проблему довольно просто. Скажем, если в нем указано, что конкретная таблица не существует, вы должны проверить орфографию, опечатки, регистр букв, учетные данные и т. Д. Или, если он говорит, что в синтаксисе SQL есть ошибка, вам нужно изучить ваш SQL. И проблема находится прямо перед частью запроса, указанной в messaage ошибки.

Вы также должны доверять сообщение об ошибке. Если он говорит, что число токенов не совпадает с числом связанных переменных, то оно равно . То же самое касается отсутствующих таблиц или столбцов. Учитывая выбор, независимо от того, является ли ваша собственная ошибка или сообщение об ошибке неправильным, всегда придерживайтесь первого. Снова это звучит снисходительно, но сотни вопросов на этом сайте доказывают, что это очень полезно.


Обратите внимание, что для того, чтобы увидеть ошибки PDO, вы должны уметь видеть ошибки PHP вообще. Для этого вам нужно настроить PHP в зависимости от среды сайта:

  • на сервере разработки очень удобно иметь ошибки прямо на экране, для которых необходимо включить отображение ошибок :
    error_reporting(E_ALL);
    ini_set('display_errors',1);
    
  • , находясь на реальном сайте, все ошибки должны быть зарегистрированы, но никогда не показаны клиенту. Для этого настройте PHP следующим образом:
    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    

Обратите внимание, что error_reporting должно быть установлено на E_ALL все время.

Также обратите внимание, что, несмотря на общее заблуждение, для сообщения об ошибках не должно использоваться никаких попыток. PHP сообщит вам об ошибках PDO уже и в лучшем виде. Невыставленное исключение очень полезно для разработки, но если вы хотите показать настроенную страницу ошибки, по-прежнему не используйте try catch для этого, но только установите собственный обработчик ошибок . В двух словах вам не нужно рассматривать ошибки PDO как нечто особенное, но рассматривать их как любую другую ошибку в вашем коде.

4
задан Richard 28 June 2012 в 14:42
поделиться

3 ответа

Хорошо. Наверное, это на днях.

Я получил неправильное расширение, загруженное из поставляемых MS. Мне нужно было использовать php_pdo_sqlsrv_53_nts, а не php_sqlsrv_53_nts

Спасибо за помощь

0
ответ дан Richard 22 August 2018 в 19:56
поделиться
  • 1
    хорошо, если MS предоставляет такое, это способ пойти :) – Martin Müller 28 June 2012 в 15:10

Еще одна возможность - использовать драйверы odbc, которые по умолчанию включены в расширения php, однако вам все равно придется раскомментировать их в вашем php.ini.

extension=php_pdo_odbc.dll

Не забудьте перезапустить сервер после этого; -)

И затем используйте его следующим образом:

$db = new PDO('odbc:Driver={SQL Server};Server=192.168.x.x;Database=DatabaseName; Uid=User;Pwd=Password');
$stmt = $db->query("SELECT the_usual FROM aTable WHERE all='well'");
1
ответ дан Levit 22 August 2018 в 19:56
поделиться

Расширение PDO не совпадает с внутренним драйвером, предлагаемым Microsoft. Для PDO вы должны включить

extension=php_pdo_mssql.dll

в вашем php.ini.

Обычно этот файл (php_pdo_mssql.dll) должен быть в вашем PHP-расширении-каталоге (C: ... \ php \ ext). Если этого не существует, вы можете загрузить PHP из http://windows.php.net/download/ и просто взять расширение из пакета там (возьмите тот, который соответствует вашей PHP-версии, конечно).

// edit: просто прочитайте последний комментарий. Это расширение доступно в течение очень долгого времени и может считаться рабочим. Если вам не разрешено использовать его, вы должны переписать свой код, чтобы использовать функции, которые предлагает собственный драйвер для PHP.

2
ответ дан Martin Müller 22 August 2018 в 19:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: