0

最初のSQLステートメントの結果値を取得しようとして問題が発生したため、2番目のステートメント内で使用できます。

私の最初の声明はこれです:

$query = "SELECT restaurantid FROM restaurant WHERE username = '$_SESSION[username]'";
$result=mysql_query($query);

if(!$result)
{
 echo "Error: " . mysql_error() . "Query: " . $query;          
}

  while ($row = mysql_fetch_assoc($result)) {
echo $row['restaurantid'];
}

mysql_free_result($result);

私がブラウザで使用しているインスペクターコンソールから、このステートメントは起動時に「1」を返します。これは私が探している変数です。

私の最後の行のすぐ下(mysql_free_result ....)私は次のように私の2番目のクエリです:

$query = "INSERT INTO deal (dname, description, restaurantid) VALUES ('$name', '$desc', '$result')";
$add = mysql_query($query);
$num = mysql_numrows($add);

if($num != 0) {

echo "true";

} else {

echo "Error: " . mysql_error() . "Query: " . $query;

}

ただし、私の問題は、このコードを実行しようとすると、2番目のステートメントが最初のクエリから必要な前の結果値を取得していないように見えることです。誰かが私のために状況に光を当てることができることを願っています。私はコーディングに不慣れで、これはほぼ正しいので、すべてのヘルプとアドバイスをいただければ幸いです。ありがとう :)

4

3 に答える 3

1

まず、 Mysqlは非推奨であり、SQLインジェクションに対して脆弱であるため、使用しないでください。代わりにMysqliを使用してください。

$restaurantId = $row['restaurantid'];

Mysqlを使用すると、クエリは次のようになります。"INSERT INTO deal (dname, description, restaurantid) VALUES ('$name', '$desc', '$restaurantId')"

Mysqliを使用すると、次のようになります。

$stmt = $mysqli -> prepare("INSERT INTO deal (dname, description, restaurantid) VALUES (?,?,?)"

$stmt -> bind_param('ssi', $name, $desc, $restaurantId);
$stmt -> execute();
于 2013-02-17T11:50:47.330 に答える
0

が新しく挿入されたレコードの場合、おそらく直後$_SESSION[username]にrestaurantidを割り当てることができますmysql_insert_id();mysql_query("INSERT INTO restaurant VALUES (some_values)")

またはそうでない場合は、

$result = mysql_query($sql) or die(mysql_error());

    while($rows = mysql_fetch_array($result))
    {
        $restaurantid = $rows['restaurantid'];

    }
于 2013-02-17T12:12:41.197 に答える
0

クエリを1つに組み合わせることができます

INSERT INTO deal (dname, description, restaurantid) 
SELECT '$name', '$desc', restaurantid 
FROM restaurant 
WHERE username = '$_SESSION[username]'

ところで、これはSQLインジェクションに対して非常に脆弱です。それを回避するためのヒントについては、こちらをご覧ください

于 2013-02-17T11:47:00.630 に答える