1

私はこれを別のウェブサイトで動作させましたが、これを修正すると問題が発生し、余分なパラメーターがあると思われる場所がわかりません。

後で Javascript を追加しますが、ドロップダウン メニューから選択して、データベースから対応する情報を出力できるようにする必要があります。私のPHPコードは次のとおりです。

 include('definitions.php');

 $con=mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
 // Check connection
 if (mysqli_connect_errno())
    {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

 echo "These are the matches for the search";
 echo "<br>";

 $query="SELECT name,email,town,location,gmapslink FROM users WHERE `town` = '?'";
 $stmt = mysqli_prepare($con, $query);

 mysqli_stmt_bind_param($stmt, "s", $_POST['select1']);
 var_dump($_POST);

 mysqli_stmt_execute($stmt);

 /* bind variables to prepared statement */
    mysqli_stmt_bind_result($stmt, $col2, $col3, $col5, $col8, $col9);

 while(mysqli_stmt_fetch($stmt))
   {
    printf("Name:%s\t Email:%s\t Town:%s\t Location:%s\t Google Maps Link:%s\t", $col2,    $col3, $col5, $col8, $col9);
   echo "<br>";

   }

    /* close statement */
      mysqli_stmt_close($stmt);


 /* close connection */
 mysqli_close($con);

 ?>

Webサイトから返ってきた返信は以下の通りです。これらは検索の一致です:

PHP エラー メッセージ:

警告: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: 変数の数が、18 行目の /home/a5839517/public_html/search.php の準備済みステートメントのパラメーターの数と一致しません

無料の Web ホスティング:

array(3) { ["county"]=> string(15) "Outside Ireland" ["select1"]=> string(12) "Ballincollig" ["select"]=> NULL }

データベースで SQL コードを実行すると問題なく動作しますが、この場合は動作させるために と を引用符で囲む必要がtownあり?ました。

パラメータとしての私の問題は正しいようです。

上記のphpを呼び出す元のファイルから編集を追加しました:

 <form action="search.php" method="post">
 County <select name="county">
 <option>   Outside Ireland </option>
 <option>   Antrim  </option>
 <option>   Armagh  </option>

 </select>
 <br>
 Name of Book
 <?php
 mysql_connect(DB_HOST,DB_USER,DB_PASS) or die("Connection Failed");
 mysql_select_db(DB_NAME)or die("Connection Failed");
 $query = "SELECT DISTINCT town FROM users";
 $result = mysql_query($query);
 ?>
 <select name="select1">
 <?php
 while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
 ?>
 <option value="<?php echo $line['town'];?>"> <?php echo $line['town'];?> </option> 
 <?php
 }
 ?>
 </select>
 <input type="submit">
 </form>

上記のコードを修正して、select1 ステートメントと列名をバッククォートに含めます。

4

3 に答える 3

1

試してみてください。街中の引用符の代わりに、街中のバッククォートを使用してください。

于 2013-04-16T19:31:58.237 に答える
0

? を引用符で囲まないでください。あなたの声明の町:

$query="SELECT name,email,town,location,gmapslink FROM users WHERE 'town' = '?'";

そのはず

$query="SELECT name,email,town,location,gmapslink FROM users WHERE town = ?";

町は列名であり、引用符で囲むことはできません。? mysql インターフェースによって置換される特殊文字です。

于 2013-04-16T19:43:03.650 に答える