Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पीडीओ पीएचपी में क्वेरी त्रुटि कैसे देखें?

आपको त्रुटि मोड विशेषता PDO::ATTR_ERRMODE को PDO::ERRMODE_EXCEPTION पर सेट करने की आवश्यकता है।
और चूंकि आप अपवाद को तैयार() विधि द्वारा फेंके जाने की अपेक्षा करते हैं, इसलिए आपको PDO::ATTR_EMULATE_PREPARES* सुविधा को अक्षम कर देना चाहिए। . अन्यथा MySQL सर्वर स्टेटमेंट को निष्पादित होने तक "देख" नहीं पाता है।

<?php
try {
    $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);


    $pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)');
}
catch(Exception $e) {
    echo 'Exception -> ';
    var_dump($e->getMessage());
}

प्रिंट (मेरे मामले में)

Exception -> string(91) "SQLSTATE[42S02]: Base table or view not found: 
1146 Table 'test.doesnotexist' doesn't exist"

देखें http://wezfurlong.org/blog/2006/apr/using -pdo-mysql/
EMULATE_PREPARES=true अभी pdo_mysql ड्राइवर के लिए डिफ़ॉल्ट सेटिंग प्रतीत होती है। तब से क्वेरी कैश चीज़ को ठीक/बदल दिया गया है और mysqlnd ड्राइवर के साथ मुझे EMULATE_PREPARES=false (हालांकि मैं हूँ) के साथ कोई समस्या नहीं थी केवल एक php शौक़ीन, इस पर मेरी बात न लें...)

*) और फिर पीडीओ ::MYSQL_ATTR_DIRECT_QUERY - मुझे यह स्वीकार करना होगा कि मैं उन दो विशेषताओं (अभी तक?) की परस्पर क्रिया को नहीं समझता, इसलिए मैंने उन दोनों को सेट किया, जैसे

$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly', array(
    PDO::ATTR_EMULATE_PREPARES=>false,
    PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
    PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli::query ():mysqli नहीं ला सका

  2. MacOS पर MySQL कैसे स्थापित करें

  3. MySQL REPLACE () - एक सबस्ट्रिंग के सभी इंस्टेंस को दूसरे स्ट्रिंग से बदलें

  4. MySQL में BLOB और CLOB फाइलें कैसे डालें?

  5. Linux सर्वर पर एकाधिक MySQL इंस्टेंस स्थापित करें - एक अलग MySQL कॉन्फ़िगरेशन फ़ाइल का उपयोग करें