sql >> Database >  >> RDS >> Mysql

Mijn BOB-verklaring werkt niet

Soms produceert uw PDO-code een fout zoals Call to a member function execute() of vergelijkbaar. Of zelfs zonder enige fout, maar de query werkt niet allemaal hetzelfde. Het betekent dat uw query niet kon worden uitgevoerd.

Elke keer dat een query mislukt, heeft MySQL een foutmelding die de reden uitlegt . Helaas worden dergelijke fouten standaard niet overgebracht naar PHP, en het enige wat je hebt is een stilte of een cryptische foutmelding zoals hierboven vermeld. Daarom is het erg belangrijk om PHP en PDO te configureren om u MySQL-fouten te melden. En zodra u de foutmelding krijgt, is het een goed idee om het probleem op te lossen.

Om de gedetailleerde informatie over het probleem te krijgen, plaatst u ofwel de volgende regel in uw code direct na het verbinden

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

(waar $dbh is de naam van uw PDO-instantievariabele) of - beter - voeg deze parameter toe als een verbindingsoptie . Daarna worden alle databasefouten vertaald in PDO-uitzonderingen die, als ze met rust gelaten worden, net zo zouden werken als gewone PHP-fouten.

Er is een zeer kleine kans dat in het geval van een specifieke fout er geen uitzondering wordt gegenereerd. Als uw query() /prepare() of execute() oproep retourneert false maar er is geen uitzondering, controleer de PDO::errorInfo() zoals dit,

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

Nadat u de foutmelding hebt gekregen, moet u deze lezen en begrijpen. Het klinkt te voor de hand liggend, maar leerlingen zien vaak de betekenis . over het hoofd van de foutmelding. Maar meestal verklaart het het probleem vrij eenvoudig:

  • Stel, als er staat dat een bepaalde tabel niet bestaat, moet je de spelling, typefouten en hoofdletters controleren. Je moet er ook voor zorgen dat je PHP-script verbinding maakt met een juiste database
  • Of, als er staat dat er een fout zit in de SQL-syntaxis, dan moet je je SQL onderzoeken. En het probleem is precies voor het querygedeelte dat in het foutbericht wordt genoemd.

Je moet ook vertrouwen de foutmelding. Als het zegt dat het aantal tokens niet overeenkomt met het aantal gebonden variabelen, dan is het is dus. Hetzelfde geldt voor afwezige tabellen of kolommen. Als je de keuze hebt, of het nu je eigen fout is of de foutmelding niet klopt, blijf dan altijd bij de eerste. Nogmaals, het klinkt neerbuigend, maar honderden vragen op deze site bewijzen dat dit advies buitengewoon nuttig is.

Merk op dat om PDO-fouten te zien, je PHP-fouten in het algemeen moet kunnen zien. Om dit te doen, moet u PHP configureren, afhankelijk van de site-omgeving:

  • op een ontwikkeling server is het erg handig om fouten direct op het scherm te hebben, waarvoor het weergeven van fouten moet worden ingeschakeld:

    error_reporting(E_ALL);
    ini_set('display_errors',1);
    
  • tijdens een live site, alle fouten moeten worden gelogd, maar nooit getoond naar de klant. Configureer PHP hiervoor op deze manier:

    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    

Merk op dat error_reporting moet worden ingesteld op E_ALL de hele tijd.

Merk ook op dat, ondanks de veelvoorkomende waanvoorstelling, geen try-catch hoeft te worden gebruikt voor de foutrapportage . PHP zal je PDO-fouten al melden, en in een veel betere vorm. Een niet-afgevangen uitzondering is erg goed voor ontwikkeling, maar als je een aangepaste foutpagina wilt tonen, gebruik dan nog steeds geen try catch hiervoor, maar stel gewoon een aangepaste foutafhandelaar . In een notendop, u hoeft PDO-fouten niet als iets speciaals te beschouwen, maar beschouw ze als elke andere fout in uw code.

P.S.
Soms is er geen fout maar ook geen resultaten. Dan betekent dit:er zijn geen gegevens die aan uw criteria voldoen . Dus je moet dit feit toegeven, zelfs als je kunt zweren dat de gegevens en de criteria in orde zijn. Zij zijn niet. Je moet ze opnieuw controleren. Ik heb een kort antwoord dat je zou helpen om het overeenkomende probleem te lokaliseren, Probleem hebben met overeenkomende rijen in de database BOB gebruiken . Volg deze instructie en de gekoppelde tutorial stap voor stap en je probleem is opgelost of je hebt een antwoordbare vraag voor Stack Overflow.




  1. UNPIVOT op een onbepaald aantal kolommen

  2. PostgreSQL retourneert een functie met een aangepast gegevenstype

  3. SQL-injectie-aanvallen voorkomen met Python

  4. JSON-functies en -operators in SQLite (volledige lijst)