Mysql
 sql >> база данни >  >> RDS >> Mysql

Моят PDO изявление не работи

Понякога вашият PDO код произвежда грешка като Call to a member function execute() или подобен. Или дори без грешка, но заявката не работи все едно. Това означава, че вашата заявка не е била изпълнена.

Всеки път, когато заявка е неуспешна, MySQL има съобщение за грешка, което обяснява причината . За съжаление по подразбиране такива грешки не се прехвърлят в PHP и всичко, което имате, е мълчание или загадъчно съобщение за грешка, споменато по-горе. Следователно е много важно да конфигурирате PHP и PDO, за да ви съобщават грешки в MySQL. И след като получите съобщението за грешка, ще бъде лесно да отстраните проблема.

За да получите подробна информация за проблема, или поставете следния ред в кода си веднага след свързване

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

(където $dbh е името на вашата променлива на PDO екземпляр) или - по-добре - добавете този параметър като опция за свързване . След това всички грешки в базата данни ще бъдат преведени в PDO изключения, които, ако бъдат оставени сами, ще действат точно като обикновени PHP грешки.

Има много малък шанс в случай на някаква конкретна грешка да не бъде изведено изключение. Ако вашият query() /prepare() или execute() повикването връща false но няма изключение, проверете PDO::errorInfo() така,

 trigger_error("PDO errorInfo: ".$dbh->errorInfo());

След като получите съобщението за грешка, трябва да го прочетете и разберете. Звучи твърде очевидно, но учащите често пренебрегват значението на съобщението за грешка. И все пак през повечето време това обяснява проблема доста просто:

  • Да речем, ако пише, че конкретна таблица не съществува, трябва да проверите правописа, печатните грешки, главния и главния букви. Също така трябва да се уверите, че вашият PHP скрипт се свързва с правилна база данни
  • Или, ако пише, че има грешка в синтаксиса на SQL, тогава трябва да проверите своя SQL. И проблемното място е точнопреди частта от заявката, цитирана в съобщението за грешка.

Вие също трябва да се доверявате съобщението за грешка. Ако пише, че броят на жетоните не съвпада с броя на свързаните променливи, значи е така. Същото важи и за отсъстващи таблици или колони. Предвид избора, независимо дали това е ваша собствена грешка или съобщението за грешка е грешно, винаги се придържайте към първото. Отново звучи снизходително, но стотици въпроси на този сайт доказват, че този съвет е изключително полезен.

Имайте предвид, че за да видите 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 грешките като нещо специално, а да ги разглеждате като всяка друга грешка в кода си.

P.S.
Понякога няма грешка, но и резултати. Тогава това означава, че няма данни, които да отговарят на вашите критерии . Така че трябва да признаете този факт, дори ако можете да се закълнете, че данните и критериите са наред. Те не са. Трябва да ги проверите отново. Имам кратък отговор, който би ви помогнал да определите проблема със съвпадение, Имате проблем със съвпадащи редове в базата данни използвайки ЗНП . Просто следвайте тази инструкция и свързания урок стъпка по стъпка и или решите проблема си, или имайте отговорен въпрос за Stack Overflow.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията POSITION() в MySQL

  2. Как мога да импортирам голям (14 GB) MySQL файл за дъмп в нова база данни на MySQL?

  3. GROUP_CONCAT() Функция в MySQL

  4. SQLSTATE[HY000] [1045] Достъпът е отказан за потребител 'username'@'localhost' с помощта на CakePHP

  5. Производителност на MySQL:Как да използваме индексирането на базата данни на MySQL