Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách xem lỗi truy vấn trong PDO PHP

Bạn cần đặt thuộc tính chế độ lỗi PDO ::ATTR_ERRMODE thành PDO ::ERRMODE_EXCEPTION.
Và vì bạn mong đợi ngoại lệ được đưa ra bởi phương thức chuẩn bị (), bạn nên tắt tính năng PDO ::ATTR_EMULATE_PREPARES * . Nếu không, máy chủ MySQL sẽ không "nhìn thấy" câu lệnh cho đến khi nó được thực thi.

<?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());
}

bản in (trong trường hợp của tôi)

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

xem http://wezfurlong.org/blog/2006/apr/using -pdo-mysql /
EMULATE_PREPARES =true có vẻ là cài đặt mặc định cho trình điều khiển pdo_mysql ngay bây giờ. Bộ nhớ cache truy vấn đã được sửa / thay đổi kể từ đó và với trình điều khiển mysqlnd, tôi không gặp vấn đề gì với EMULATE_PREPARES =false (mặc dù tôi chỉ một người có sở thích php, đừng coi thường tôi ...)

*) và sau đó là PDO ::MYSQL_ATTR_DIRECT_QUERY - Tôi phải thừa nhận rằng tôi không hiểu sự tương tác của hai thuộc tính đó (?), Vì vậy tôi đã đặt chúng cả hai, như

$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. java.sql.SQLException:Giá trị chuỗi không chính xác:'\ xF0 \ x9F \ x91 \ xBD \ xF0 \ x9F ...'

  2. Thực hiện các phép tính trong MySQL và PHP

  3. Cách thực thi thủ tục đã lưu trữ trong MySQL Workbench

  4. Sử dụng SSH Tunneling như một giải pháp thay thế VPN

  5. Neo4j - Chọn dữ liệu với MATCH bằng Cypher