2

私はこれをチェックしました: orderbyおよびlimit句にpdoのプリペアドステートメントを使用するにはどうすればよいですか?

しかし、それは「?」については話しません。プレースホルダー。

私はこのような声明を持っています:

$stmt=$connect->prepare("SELECT * FROM users LIMIT ?");
$stmt->execute(array($max_num));

ただし、そもそもLIMIT番号を括弧で囲むことは想定されていないため、機能しません。

どうすればこの問題を解決できますか?前もって感謝します。

4

4 に答える 4

2
    $stmt=$connect->prepare("SELECT * FROM users LIMIT ?");
    $stmt->execute(array($max_num));

パラメータは整数を想定しているため、上記のクエリは機能していません。上記の方法でバインドすると、値は文字列にバインドされます。

したがって、解釈されるクエリは次の形式になります。

   select * from users limit '1'

次の方法でクエリを変更する必要があります。

     $stmt->bindValue(1,1,PDO::PARAM_INT);
     $stmt->execute();
于 2012-05-21T20:42:36.857 に答える
1
$connect->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt=$connect->prepare("SELECT * FROM users LIMIT ?");
$stmt->execute(array((int)$max_num));
于 2012-05-21T19:30:00.963 に答える
0

試す

$stmt->execute(array((int)$max_num));

またはそれがうまくいかない場合は、試してみてください

$stmt->bindParam(1, (int)$max, PDO::PARAM_INT);
$stmt->execute();
于 2012-05-21T19:12:26.057 に答える
-2

PDOは、その数値を知るためにLIMITを理解していないようです。あなたは一緒に暮らす必要があるかもしれません

$connect->query("SELECT * FROM users LIMIT $max_num"); 
于 2012-05-21T19:14:21.703 に答える