2012-05-07 38 views
7

Tôi sử dụng sql sau để lấy giá trị giá trị của trường que_id của một dòng cụ thể trong bảng của tôi và nó hoạt động tốt. Lưu ý rằng các số thứ tự que_id (tự động tăng) và số dòng không giống nhau.PHP PDO -> Truy vấn chuẩn bị trả về lỗi (cùng một truy vấn không được chuẩn bị làm việc tốt)

$qry_que_getid = $connexion->query('SELECT somefield FROM table ORDER BY somefield ASC LIMIT '.$lineNumberSeeked.', 1'); 

$row = $qry_que_getid->fetch(PDO::FETCH_ASSOC); 
echo $row['que_id']; 

Khi tôi cố gắng chuyển đổi truy vấn đó vào một truy vấn chuẩn bị như sau Tôi có lỗi và tôi không nhận được nó:

$qry_que_getid = $connexion->prepare('SELECT somefield FROM table ORDER BY somefield ASC LIMIT ?, 1'); 

$qry_que_getid->execute(array(4)); 

$row = $qry_que_getid->fetch(PDO::FETCH_ASSOC); 
echo $row['que_id']; 

tôi nhận được lỗi sau SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''3', 1' at line 1

Hope somene có thể giúp tôi hiểu. Cảm ơn bạn trước. Chúc mừng. Marc.

+1

Bạn không thực hiện cùng một truy vấn. Các kết thúc đầu tiên với 'LIMIT 3, 1' nhưng kết thúc thứ hai với' LIMIT '3', 1' - vì vậy xin đừng viết nó là truy vấn * cùng * khi nó không được. – hakre

+0

Xin chào hakre. Bạn đang nói về cái gì vậy? – Marc

+0

Bạn có thấy dấu nháy đơn xung quanh '3' trong truy vấn thứ hai của mình không? Và Pradator có giải pháp cho bạn. – hakre

Trả lời

4

Từ hướng dẫn PHP tại http://www.php.net/manual/en/pdostatement.execute.php:

An array of values with as many elements as there are bound parameters in the SQL statement being executed. All values are treated as PDO::PARAM_STR.

Các LIMIT khoản dự kiến ​​một số nguyên Tôi tin vì vậy bạn nên sử dụng phương pháp bindParam() để thay thế.

$limit = 4; 
$qry_que_getid->bindParam(1, $limit, PDO::PARAM_INT); 
$qry_que_getid->execute(); 

Nếu không, thông số sẽ được chuyển thành loại PDO :: PARAM_STR thay vì PDO dự kiến ​​:: PARAM_INT.

+0

Xin chào Pradador. Thks cho đầu vào. Hãy cho tôi một giây để kiểm tra điều đó. Tôi sẽ quay lại ... – Marc

+0

Tôi đã thử và nhận lỗi sau-> Lỗi nghiêm trọng: Không thể chuyển tham số 2 bằng tham chiếu trong /myFilePath/myFile.php – Marc

+0

Nhìn vào chữ ký phương thức tại http: //www.php. net/manual/en/pdostatement.bindparam.php 'bindParam (tham số $, & $ variable [, $ data_type [, $ length [, $ driver_options]]])' có vẻ như bindParam() đang mong đợi một tham chiếu biến cho đối số # 2. Hãy thử lưu trữ 4 biến đó thành biến số giới hạn $ và chuyển biến $ limit thay thế. – Cowlby

Các vấn đề liên quan