2012-05-07 15 views
7

Używam następującego sql, aby uzyskać wartość wartości pola que_id określonego wiersza mojej tabeli i działa poprawnie. Zauważ, że que_id (auto-inkrementacja) i numery linii nie są takie same.PHP PDO -> Przygotowany błąd zwracania zapytania (to samo zapytanie nie zostało poprawnie przygotowane)

$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']; 

Kiedy próbuję przekształcić tę kwerendę w przygotowanym zapytaniu następująco mam błąd i nie rozumiem go:

$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']; 

I pojawia się następujący błąd 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

Nadzieja somene może mi pomóc zrozumieć. Z góry dziękuję. Twoje zdrowie. Marc.

+1

Nie wykonujesz tego samego zapytania. Pierwszy kończy się na 'LIMIT 3, 1', a drugi kończy się na' LIMIT '3', 1' - więc proszę nie pisać, to jest to samo * zapytanie, gdy tak nie jest. – hakre

+0

Witaj hakre. O czym mówisz? – Marc

+0

Czy widzisz pojedyncze cudzysłowy wokół "3" w drugim zapytaniu? A Pradator ma dla ciebie rozwiązanie. – hakre

Odpowiedz

4

z podręcznika PHP w 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.

Klauzula LIMIT spodziewa liczbę całkowitą Wierzę więc należy użyć metody bindParam() zamiast.

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

W przeciwnym razie parametr zostanie przekazany jako typ PDO :: PARAM_STR zamiast oczekiwanego PDO :: PARAM_INT.

+0

Witaj Pradador. Thks na wejście. Daj mi sekundę, żeby to przetestować. Powrócę ... – Marc

+0

Wypróbowałem to i otrzymałem następujący błąd-> Błąd krytyczny: Nie można przekazać parametru 2 przez odniesienie w /myFilePath/myFile.php – Marc

+0

Patrząc na sygnaturę metody na http: //www.php. net/manual/pl/pdostatement.bindparam.php 'bindParam ($ parameter, & $ variable [, $ data_type [, $ length [, $ driver_options]]])' wygląda na to, że bindParam() oczekuje referencji zmiennej dla argumentu # 2. Spróbuj zapisać 4 w zmiennej $ limit i zamiast niej podać zmienną limit $. – Cowlby

Powiązane problemy