-1

これは私の最初のコード質問です!私はMySQLとPHPの両方の初心者なので、これは本当に簡単かもしれません!これが私のコードです:

これは私のIndex.phpに含まれているファイルです...:

<?php
$query="SELECT * FROM wines WHERE Type='$type' AND Country='$country'";
$products=mysql_query($query);
?>

そして、これらは$_GET関数で設定された変数です。

<?php
$type=$_GET['type'];
$fruit=$_GET['fruit'];
$country=$_GET['country'];
?>

その後、配列をフェッチして操作します。

問題は、$queryが'$ type'-変数だけで正常に機能するが、$ country -variable------または私が試した他の変数では機能しないことです。

私はMicrosoftWebmatrixを使用していますが、2番目の変数に$-signを入力した瞬間に問題が発生することがわかります...

混乱している!あなたが新参者を助けることができることを願っています:)

編集:問題は変数の周りの「ダニ」にあることがわかりました。それを行う正しい方法は、バッククォート( ``)を使用することです。また、mysqlの代わりにPDOとMySQLiを使い始めました。初心者にとっては、MySQLiがおそらく最も簡単です。消毒も始めました。

4

2 に答える 2

1

注意すべき(重要な)ポイントがいくつかあります...

  1. 次のリリースで非推奨になるため、mysql_関数の代わりにmysqli_*関数を使用する必要があります。

  2. DBクエリを作成する前に、入力のサニタイズを開始します。早い段階で始めるのは良い習慣であり、長期的には多くの頭痛の種を減らすことができます!

sprintfmysqli_real_escape_stringを使用してSQLをビルドしてから、dbで実行することをお勧めします。

$sql = sprintf("SELECT * FROM wines WHERE Type='%s' AND Country='%s'" ,
    mysqli_real_escape_string($db_object, $type),
    mysqli_real_escape_string($db_object, $country));

$results = mysqli_query($db_object, $sql);

ps。私の例では、$ db_objectはmysqli_connect()の呼び出しから来ています

編集:

(間もなく廃止される)mysql_関数を使用すると、上記の例では次のようになります。

$sql = sprintf("SELECT * FROM wines WHERE Type='%s' AND Country='%s'" ,
    mysql_real_escape_string($type),
    mysql_real_escape_string($country));

$results = mysql_query($sql);
于 2013-03-20T22:03:03.893 に答える
0

クエリ文字列で$typeを送信しない場合、クエリは次のようになります。

SELECT * FROM wines WHERE Type='' AND [other stuff];

type='';のワインのみが返されます。

試す:

<?php
$wheres=array();
if (isset($type)){$wheres['Type']=$type;}
if (isset($type)){$wheres['Country']=$country;}
// and so forth for each parameter
$query="SELECT * FROM wines";
if (count($wheres) != 0){
    $query.=" WHERE ";
    foreach ($wheres as $k => $v){$query.="$k='$v' AND ";}
    $query.=" 1=1;"
}
$products=mysql_query($query);
?>
于 2013-03-20T22:02:22.693 に答える