0

我在尝试获取第一个 SQL 语句的结果值时遇到问题,因此我可以在第二个语句中使用 in。

我的第一句话是这样的:

$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 ....)的正下方,我是我的第二个查询,如下所示:

$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;

}

但是,我的问题在于,每当我尝试执行此代码时,我的第二条语句似乎都没有从第一个查询中获取所需的先前结果值。只是希望有人能对我的情况有所了解。我是编码新手,我几乎已经正确了,所以所有的帮助和建议将不胜感激!谢谢 :)

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

您可以将查询合并为 1

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

顺便说一句,这对 SQL 注入非常不利。有关避免这种情况的提示,请参见此处

于 2013-02-17T11:47:00.630 回答
0

如果$_SESSION[username]是新插入的记录,可能你可以mysql_insert_id();在之后分配 restaurantidmysql_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 回答