2011-01-13 30 views
6

Tôi không thể execut kịch bản dài PDO ném một ngoại lệ:Làm thế nào để thực hiện kịch bản mysql với các biến bằng cách sử dụng PHP :: PDO?

SQLSTATE[HY000]: General error 

Nếu tôi gửi kịch bản mà không chứa các biến nó chạy w/o vấn đề. Kịch bản tương tự chạy trên giao diện phpmyadmin.

Dưới đây là đoạn mã của tôi:

try { 
$dsn = "mysql:host=" . DB_SERVER . ";dbname=" . DB_DEFAULT; 
$db = new PDO($dsn, DB_USER, DB_PASS); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$q = $db->query($query); 
if (!$q) { 
echo $db->errorInfo(); 
    } else { 
     $rows = $q->fetchAll(PDO::FETCH_ASSOC); 
    } 
} catch (PDOException $e) { 
    var_dump($e); 
} 

Dưới đây là một số bài kiểm tra mà không thực hiện bởi PDO:

SET @ra_LMC:=80.9; 
SELECT @ra_LMC; 

Làm thế nào tôi nên execut với PDO kịch bản dòng đa?

Cảm ơn
Arman.

+0

Chúng tôi có thể xem truy vấn của bạn trông như thế nào không? –

+0

Truy vấn không thành công nếu có bất kỳ toán tử "set" nào được viết. – Arman

Trả lời

11

PDO không cho phép thực hiện nhiều câu lệnh trong một yêu cầu truy vấn(). Nhưng biến @ra_LMC của bạn sẽ hiển thị trong kết nối hiện tại, vì vậy bạn có thể đặt dòng thứ hai (SELECT) của bạn vào một cuộc gọi truy vấn mới().

Để đọc toàn bộ tập lệnh, bạn phải phân tích cú pháp tệp và chạy từng câu lệnh bằng lệnh gọi truy vấn().

6

PDO chỉ có thể thực hiện một câu lệnh tại một thời điểm. Bạn có thể chạy ête SETSELECT làm 2 câu riêng biệt. Hoặc bạn có thể đặt biến bằng cách sử dụng FROM.

SELECT @ra_LMC FROM (SELECT @ra_LMC:=80.9) q 
Các vấn đề liên quan