2017-01-06 3 views
-2

私はPHPを初めて使用しています。私が書いたこのコードは、MySQLデータベーステーブルを示しています。私は、名前またはIdが与えられた値と一致する行を検索して表示したい。私が書いた本はmySQLは文字列ではなく数値を検索します

HTML-

<form action="" method="post" name="register"> 

       <div class="mail-text"> 
        Search by Name or ID: 
       </div> 

       <input name="search"  type="text"   size="70"   onClick="border: 1px solid #30a8da;" id="mail"/> 

       <input name="search_button" type="submit"  value="Search" onclick="return error()"/> 

</form> 

php-

$con = mysqli_connect('127.0.0.1' , 'root' , '' , 'erp'); 

if (!$con) 
{ 
    die("Connection failed : " . mysql_error()); 
} 

$query ="SELECT * FROM product_info"; 
$result = mysqli_query($con,$query); 

echo " <table border='1'> 
      <tr> 
       <th>ID</th> 
       <th>Name</th> 
       <th>Material Fees</th> 
       <th>Employee Fees</th> 
       <th>Production Per Day</th>      
      </tr>"; 

if (isset($_POST["search"])) 
{ 
    $search_word=$_POST['search']; 
} 

if(!empty($search_word)) 
{ 
    $query ="SELECT * FROM product_info WHERE name= ".$search_word." or id=".$search_word; 
    $result = mysqli_query($con,$query); 
} 

while ($row = mysqli_fetch_assoc($result)) 
{ 
    echo "<tr>"; 
    echo "<td>" . $row['id'] .     "</td>"; 
    echo "<td>" . $row['name'] .     "</td>"; 
    echo "<td>" . $row['material_fees'] .  "</td>"; 
    echo "<td>" . $row['worker_fees'] .   "</td>"; 
    echo "<td>" . $row['production_capacity'] . "</td>";    
    echo "</tr>"; 
} 

問題は、与えられた検索語が番号(ID)がある場合、このコードは完璧に動作していることであるコード - しかし、もし文字列(名前)を指定すると、次のエラーが返されます。

警告:mysqli_fetch_assoc()は、パラメータ1がmysqli_result C中:行の\ xamppの\ htdocsに\ ERP \ PHP \のshow_product.php 114

これはwhile ($row = mysqli_fetch_assoc($result))

第114ライン - である誰かが間違ってここで行われているものを説明していただけますか?

+0

最初に修正してください。 sqlキーワードの間にスペースを入れてください。$ query = "SELECT * FROM product_info"; – xFighter

+0

2番目のクエリ$ query = "SELECT * FROM product_info WHERE name = '"。$ search_word。 "' OR id = '"。$ search_word。 "'"; – xFighter

+0

クエリが何も返さず、配列にフェッチするものがない場合、何も返されず、パラメータが無効/設定されておらず、エラーを修正するために、クエリを確認する必要があるため正解で何かを返します。 – SteffenCH

答えて

1

SQL文の適切な区切り文字で文字列をラップする必要があります。

整数を検索する場合、整数は検索する必要はありませんが、文字列は検索しません。

整数で例えば、あなたのSQLは大丈夫です

select*from product_info where name= 123 or id=123

だろう。しかし、文字列を使用するとこのSQLが作成されます。 MySQLのは、列名または何かをすることができ、文字列testを懸念している限り動作しません

select*from product_info where name = test or id= test

。だからあなたは持っている必要があります。

select*from product_info where name='123' or id='123'

私も少し良くクエリをフォーマットするお勧めします。

SELECT * FROM product_info WHERE name = '123' OR id = '123'

+0

あなたはSQL構文にエラーがあります – xFighter

+1

これは実際に助けました。ありがとう!私はこのコードを使用しました$ \t = "SELECT * FROM product_info WHERE name = '"。$ search_word。 "' OR id = '"。$ search_word。 "'"; – GradDev

+0

@reTardis - ありがとう、何らかの理由でこの回答が下落したとしても、それはあなたを助けてくれてうれしいです。あなたのSQLを見ると、一重引用符と二重引用符が正しい順序であることを確認してください。 – Tom

関連する問題