1

mysql データベースの情報を照会するドロップダウン メニューを作成しようとしています。私はそれを機能させ、@jeroen の助けを借りて、選択したオブジェクトを namesearch16.php に渡すようになったと思います。Web ページは次の場所にあります: http://swapabook.hostei.com/search16.php

エラーはありませんが、クエリに一致するデータベース内の行が出力されることを期待していました。

文字列で返されます: array(1) { ["select1"]=> &string(4) "book" }

問題は、間違ったものを返しているという while ステートメントにあると感じています。ちなみに、私のテーブルには5つのフィールドがあり、そのうちの4つを返したいと思っています。

初期ファイルには次のコードがあります。

<form action="namesearch16.php" method="post">
Name of Book
<?php
mysql_connect("mysql1x.000webhost.com","a4425533_swapabo","xxxxx") or      die("Connection Failed");
mysql_select_db('a4425533_swapabo')or die("Connection Failed");
$query = "SELECT * FROM book";
$result = mysql_query($query);
?>
<select name="select1">
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
?>
<option value="<?php echo $line['book'];?>"> <?php echo $line['book'];?> </option> 
<?php
}
?>
</select>
<input type="submit">
</form>

@jeroen からの入力に従って、2 番目のファイルを次のように変更しました。

<?php
      $con=mysqli_connect('mysql1x.000webhost.com','a4425533_swapabo','xxxx','a4425533_swapabo');
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
$namequery="SELECT * FROM book WHERE book = ?";
$namestmt = mysqli_prepare($con, $namequery);

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

mysqli_stmt_execute($namestmt);

if ($result = mysqli_query($con, $namequery)) {
while($row = mysqli_fetch_array($result))
  {
  echo $row['book'];
  echo "<br>";
  echo "got as far as the while loop";
  }
}
?>
4

1 に答える 1

0

$_POSTには要素がないように見えるため、次のbookように変更する必要があります。

$result = mysqli_query($con,"SELECT * FROM book WHERE book = '$_POST[book]'");

に:

$result = mysqli_query($con,"SELECT * FROM book WHERE book = '$_POST[select1]'");

ただし、SQL インジェクションの問題がないことを確認する必要があるため、クエリは次のようになります。

SELECT * FROM book WHERE book = ?

次に、クエリを準備し、それに$_POST['select1']値をバインドします。たとえば、マニュアルのこのセクションを参照してください。

編集:あなたの編集にはいくつかの問題があります(タイプミスは別として...):マニュアルの手順に従ってください:

  • $_POST変数を引用しないでください:mysqli_stmt_bind_param($namestmt, "s", $_POST['select1']);
  • クエリを実行します。
  • 結果をバインドします。
  • 結果セットを取得します。

そして、データベースに対して別のクエリを実行することを意味するため、この行を削除する必要があります。

$result = mysqli_query($con,$namequery);
于 2013-03-07T13:04:27.287 に答える