2016-07-29 9 views
0

私はPHPでmySQLを使用して検索機能を作成しようとしていますが、エラーが発生しました。mySQLプログラムエラーでPHPを検索

"構文エラー、予期しない '場合'"

とあれば、それは($ resault-> NUM_ROWS> 0)から来ています。誰かが私に間違った仕事やこれを解決するための可能な方法を教えてくれましたか?あなたの答えを読んだ後で、あなたが自分のコードについて正しいことを認識したので、私はいくつかのパラメータを変更しました。私はまだそのエラーについて何か分かりません。

<?php 
if ($conn->connect_error) { 
    @die("Connection failed: " . $conn->connect_error); 
} 

if (isset($_GET["P"])) { 
    $conn = new mysqli($host, $user, $pass, $db_name); 
    $resault = $conn->query("SELECT title,field_paint_efficeincy__value FROM node_revision, field_data_field_paint_efficeincy_ WHERE title LIKE '$_GET[P]%'"); 
    echo $resault->num_rows; 


    if ($resault->num_rows > 0) { 
    while($row = $resault->fetch_assoc { 
    echo $row['*'] . "<br />"; 
    } 
} 
$conn->close(); 
} 
?> 


<form action="<?php echo $_SERVER['PHP_SELF']?>" method="get"> 
    PARAMETER: <input type="text" name="P" value="" /> <br/> 
    <input type="submit" value="Υπολογισμός" name="sub"> 
</form> 

FIXED

[OK]をので、私はそれを固定し、それが動作し、私はあなたが私のcode.Iはまだわからない程度正しかった実現ので、あなたの答えを読んだ後、私はいくつかのパラメータを変更エラーは約でした。

としては、あなたがコメント@

+0

となります。まともな字下げを使用すると助けになります。適切にインデントされたコードで問題を見つけるのはずっと簡単です。 – Utkanos

答えて

2

変更

while($row = $resault->fetch_assoc { 

詳細情報については

while($row = $resault->fetch_assoc()) { 

に、fetch_assoc

説明をクリックしてくださいspiryltusrektus回答:"私は全体のラインをコメントにしましたが、それでも同じミスです。"

だから、私によると。あなたがやった:

if ($resault->num_rows > 0) { 
    //while($row = $resault->fetch_assoc { 
    echo $row['*'] . "<br />"; 
    } 
} 

をだから、あなたはWhile loopコメントが、whileループのclosing bracesをコメントしていません。同じエラーが来た理由です」

『構文エラー、予期しないあなたが本当にそれをテストしたい場合は、

だから、』 『もし』。コメントの両方A)while loop;をと、b)はしばらくのclosing braces}ループ。

と同様に、

if ($resault->num_rows > 0) { 
    //while($row = $resault->fetch_assoc { 
    echo $row['*'] . "<br />"; 
    //} 
} 

しかし、あなたはありませんそれを行う必要があります。

だけで、

while($row = $resault->fetch_assoc()) {

+0

それはそうではありません。そのグループの行は別のコードのコピー貼り付けであり、貼り付けを忘れたからです。どちらの方法でも、存在しない行にエラーが発生しています。つまり、エラーは前の私はどれを見つけることができません。 –

+0

'fetch_assoc()'で検出された行を除いて、エラーがない行はありません。 @GeorgeNostradamos –

0
while($row = $resault->fetch_assoc { 

あなたがここに())が欠落しているようwhile($row = $resault->fetch_assoc {

())を追加します。 Utkanosがコメントしたように、まともな字下げは、入力ミスを検出するのに役立ちます。

UPDATE:

<? 
$conn = @new mysqli('localhost', 'fake_user', 'my_password', 'my_db'); 

if ($conn->connect_error) { 
    @die("Connection failed: " . $conn->connect_error); 
} 

if (isset($_GET["P"])) { 
    $conn = new mysqli($host, $user, $pass, $db_name); 
    $resault = $conn->query("SELECT title,field_paint_efficeincy__value FROM node_revision, field_data_field_paint_efficeincy_ WHERE title LIKE '$_GET[P]%'"); 
    echo $resault->num_rows; 


    if ($resault->num_rows > 0) { 

     while($row = $resault->fetch_assoc()) { 

      echo $row['*'] . "<br />"; 
     } 
    } 

    $conn->close(); 
} 
?> 


<form action="<?php echo $_SERVER['PHP_SELF']?>" method="get"> 
    PARAMETER: <input type="text" name="P" value="" /> <br/> 
    <input type="submit" value="????????µ??" name="sub"> 
</form> 

私はこのコード内の任意の構文エラーが表示されません。このコードブロックを接続パラメータで試してみてください。これで問題が解決しない場合は、コードを書き直してみてください。

+0

私は全ラインにコメントをつけましたが、それと同じ間違いです。 –

+0

@GeorgeNostradamosが私の答えを更新しました。 – tyb

0

使用$conn>error;

error printから
$conn->query("Your query") or print_r($conn->error); 

あなたはそれはあなたが$_GET[P]を使用sqlあなたにも

while($row = $resault->fetch_assoc()) { 
     echo "<pre>"; print_r($row) . "<br />"; 
     } 

である必要があり、このラインで

while($row = $resault->fetch_assoc { // forget to use()) 
     echo $row['*'] . "<br />";// $rwo['*']; is nothing 
     } 

をエラーが発生しています。それは$_GET['P']でなければなりません。

使用このcode

<?php 
if(isset($_GET['P'])){ 
//echo $_GET['P']; 

$sql = "SELECT title,field_paint_efficeincy__value FROM node_revision, field_data_field_paint_efficeincy_ WHERE title LIKE '".$_GET["P"]."%'"; 
// echo $sql;die;//just to check query 
$conn = new mysqli($host, $user, $pass, $db_name); 
    $resault = $conn->query($sql) or print_r($conn->error); 
    if ($resault->num_rows > 0) { 
    while($row = $resault->fetch_assoc()) { 
    echo "<pre>";print_r($row); 
    } 
} 
else{ 
    echo "no match found"; 

} 
$conn->close(); 
}?> 

はまた、あなたがnode_revisionfield_data_field_paint_efficeincy_秒1は、テーブルの半分の名前を探しますあなたのクエリ内のFROMの後に二つのテーブル名を持っているので、あなたが2 tableを持っています。また、titleが両方のテーブルに存在する場合、または1つだけの場合でも、ambiguousフィールドerrorの両方がある場合は、両方とも `タイトル