2

複数の「?」を使用して、PHP で select ステートメントを実行したいと考えています。それ、どうやったら出来るの?次のコードはそれを行うべきだと思いますが、何が問題なのですか?

$con = mysql_connect("database","login","password");
if (!$con){
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("posdictionary", $con);

$stmt = $con->prepare("SELECT * FROM WordPOS WHERE WORD LIKE '?%' AND pos LIKE BINARY '%?%'");
$stmt->bind_param('ss', $pattern, $pos);
$pattern = $_POST["pattern"];
$pos = $_POST["pos"];

$value = "";
if ($stmt->execute()) {
    while ($row = $stmt->fetch()) {
        $value = $value . $row['word'] . " " . $row['pos'] . "<br />";
    }
}

更新

以下の答えは素晴らしいです。PHP でエラーが発生しました。'?%' は php の sql ステートメントでは有効ではありません。クエリは次のようになります。

  $pattern = $_POST["pattern"] ."%";
  $pos = "%". $_POST["pos"] ."%";
  $stmt = $con->prepare("SELECT word, pos FROM WordPOS WHERE word LIKE ? AND pos LIKE BINARY ?");

次に、残りの回答に従ってください。

4

3 に答える 3

2

非推奨のmysql_*関数を使用して接続し、mysqli 構文に切り替えています。それはうまくいかないので、次のように変更する必要があります:

$con = mysql_connect("database","login","password");
 if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

  mysql_select_db("posdictionary", $con);

に:

$con = mysqli_connect("database","login","password");
 if (!$con)
  {
  die('Could not connect: ' . mysqli_error());
  }

  mysqli_select_db("posdictionary", $con);
于 2012-12-20T02:11:39.093 に答える
2

MySQLi API と互換性がないnew MySQLi()の代わりに で接続します。mysql_connect()

$con = new MySQLi("database","login","password","posdictionary");

あなたのprepare()execute()呼び出しは正しく、2 つのパラメーターが正しくバインドされています。ただし、fetch()MySQLi は、古いAPI や PDOで行われるような配列ではなくbind_result()、結果列が を介して変数にバインドされることを期待しているため、これは機能しません。$row = $stmt->fetch())mysql_*()

  $pattern = $_POST["pattern"];
  $pos = $_POST["pos"];

  // Substituting explicit columns in the SELECT list
  $stmt = $con->prepare("SELECT word, pos FROM WordPOS WHERE WORD LIKE '?%' AND pos LIKE BINARY '%?%'");
  $stmt->bind_param('ss', $pattern, $pos);

  // Bind result columns into vars $word, $pos
  $stmt->bind_result($word, $pos);

  // Then execute and fetch 
  $value = "";
  if ($stmt->execute()) {
  while ($row = $stmt->fetch()) {
    // Using the bound variables...
    $value .=  $word . " " . $pos . "<br />";
    }
  }
于 2012-12-20T02:07:15.520 に答える
0

最初に割り当ててからバインドします

$pattern = $_POST["pattern"];
$pos = $_POST["pos"];
$stmt->bind_param('ss', $pattern, $pos);
于 2012-12-20T02:08:02.260 に答える