0

PHP を学習してから 3 日目ですが、問題が発生しました。UPDATE および INSERT PDO クエリは正常に実行されていますが、SELECT クエリを動的に動作させるには複雑な問題があります。

これは私の検索フォームです:

<h1>Search</h1> 
<form action="otsingu_tulemused.php" method="post"> 
    Aadress:<br /> 
    <input type="text" name="aadress" value="" /> 
    <br /><br /> 
    Hind:<br />
    <input type="text" name="hind" value="" /><br /> 
    <br /><br /> 
    <input type="submit" value="Otsi" /> 
</form>

これが私の検索結果ページです。

<?php 

    // First we execute our common code to connection to the database and start the session 
    require("common.php"); 


    // This if statement checks to determine whether the edit form has been submitted 
    // If it has, then the account updating code is run, otherwise the form is displayed 

//        Vaatame, kas aadressi väli on täidetud
        if(!empty($_POST['aadress'])) 
        { 
            $aadress = $_POST['aadress']; 
        }
        else {
            $aadress = null;
        } 
//        Vaatame, kas hinna väli on täidetud
        if(!empty($_POST['hind'])) 
        { 
            $hind = $_POST['hind']; 
        }
        else {
            $hind = null;
        } 
//      Kui aadressi väli on täidetud, siis anname parameetrile väärtuse        
        if($aadress !== null) 
        { 
            $query_params[':addr'] = $aadress; 
        }
//      Kui hinna väli on täidetud, siis anname parameetrile väärtuse           
        if($hind !== null) 
        { 
            $query_params[':price'] = $hind; 
        } 

        // Note how this is only first half of the necessary update query.  We will dynamically 
        // construct the rest of it depending on whether or not the user is changing 
        // their password. 
        $query = " 
            SELECT 
                * 
            FROM kuulutused 
            WHERE 
        "; 

        // If the user is changing their password, then we extend the SQL query 
        // to include the password and salt columns and parameter tokens too. 
        if($address !== null) 
        { 
            $query .= " 
                addr LIKE :addr 
            "; 
        } 
        if($price !== null) 
        { 
            $query .= " 
            AND
                price = :price 
            "; 
        } 

        try 
        { 
            // Execute the query 
            $stmt = $db->prepare($query); 
            $result = $stmt->execute($query_params); 
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        } 
        catch(PDOException $ex) 
        { 
            // Note: On a production website, you should not output $ex->getMessage(). 
            // It may provide an attacker with helpful information about your code.  
            die("Failed to run query: " . $ex->getMessage()); 
        } 

?>
 <table class="table">
<?php foreach( $result as $row ){
   echo "<tr><td>";
     echo $row['addr'];
     echo "</td><td>";
     echo $row['price'];
     echo "</td>";
   echo "</tr>";
   }
?>
</table>

このクエリでエラーが発生します。

クエリの実行に失敗しました: SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。4 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4

2 に答える 2

1

条件が設定されていない場合、クエリは次のようになります。

SELECT * FROM kuulutused WHERE

ご覧のとおり、WHERE が空で、構文エラーです。

$address が設定されておらず、$price が設定されている場合、最終的には

SELECT * FROM kuulutused WHERE AND price = :price

繰り返しますが、構文エラーです。

mysql を使用すると、以下から開始できます。

SELECT * FROM kuulutused WHERE 1

次に、常に追加しますAND column = :value、またはAND column LIKE :value

于 2013-09-18T11:37:38.820 に答える
-2

PDO を使用するように構文エラー % がありません

whereまた、特定の条件が付属するその句を確認する必要があります。

于 2013-09-18T11:26:38.190 に答える