0

失敗するクエリがあります AND ステートメントが失敗しているようです。

if(isset($_POST['sea']) && $_POST['sm'] !==''){
$sm = trim($_POST['sm']);
$sql = "SELECT * FROM `memorials` WHERE `fname` LIKE '$sm%' OR `lname` LIKE '$sm%' OR    `comments` LIKE '$sm%' AND `status` = '2' ";
$q = $conn->prepare($sql);
$q->execute();

追加\削除 しましbackticksたが、'status = '2' は失敗します。

次のステートメントはphpmyadminで機能します

SELECT * FROM `memorials` WHERE `fname` LIKE 'test%' AND status = '2'

このステートメントはphpmyadminで失敗します

SELECT * FROM `memorials` WHERE `fname` LIKE 'test%' OR `lname` LIKE 'test%' AND status = '2'

このクエリはコメントの AND 句を検索しますが、fname と lname は無視します

$sql = "SELECT * FROM memorials WHERE `fname`  OR  `lname`  OR `comments`  LIKE '$sm%'  AND status = '2'    ";

これが(私が)失敗している提案はありますか

ありがとうございました

ゲイリー

4

2 に答える 2

1

ここでは、演算子の優先順位が重要です。いくつかの括弧を追加する必要があります:

SELECT * 
FROM   `memorials` 
WHERE  ( `fname` LIKE '$sm%' 
          OR `lname` LIKE '$sm%' 
          OR `comments` LIKE '$sm%' ) 
       AND `status` = '2' 

ドキュメント

于 2013-02-27T20:20:23.600 に答える
1

該当するセクションを括弧で囲む必要があります。おそらく次のようなものです:

SELECT * 
FROM `memorials` 
WHERE (`fname` LIKE 'test%' OR `lname` LIKE 'test%') AND status = '2'
于 2013-02-27T20:19:36.410 に答える