选择后立即删除PHP DELETE

Mar*_*cny 3 php mysql select sql-delete

我有一个PHP服务器脚本,它从MySQL数据库中选择一些数据.

只要我有mysql_query中保存在我自己的局部变量mysql_fetch_assoc的结果,我想删除我只是选择的行.

这种方法的问题在于,似乎PHP已经对我的局部变量进行了传递而不是传值,并且我的局部变量在delete命令之后变得不确定.

反正有没有绕过这个?这是我的代码:

    $query="SELECT id, peerID, name FROM names WHERE peer = $userID AND docID = '$docID' AND seqNo = $nid";
    $result = mysql_query($query);

    if (!$result)
        self::logError("FAIL:1 getUsersNamesUpdate() query: ".$query."\n");     

    if (mysql_num_rows($result) == 0)
        return array();

    $row = mysql_fetch_assoc($result);
    $result = array();
    $result["id"] = $row["id"];
    $result["peerID"] = $row["peerID"];
    $result["name"] = $row["name"];

    $query="DELETE FROM names WHERE id = $result[id];";
    $result = mysql_query($query);

    if (!$result)
        self::logError("FAIL:2 getUsersNamesUpdate() query: ".$query."\n");         

    return $result;
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 7

$result使用第二个语句覆盖变量:

$query="DELETE FROM names WHERE id = $result[id];";
$result = mysql_query($query); // result does not contain the array anymore
Run Code Online (Sandbox Code Playgroud)

将名称更改为其他名称.它与引用调用等无关.


实际上,您的第一次赋值是不必要的,因为$row它已经是一个数组:

$row = mysql_fetch_assoc($result);
$result = array();
$result["id"] = $row["id"];
$result["peerID"] = $row["peerID"];
$result["name"] = $row["name"];
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

$row = mysql_fetch_assoc($result);
// at the end
return $row;
Run Code Online (Sandbox Code Playgroud)

然后,您甚至不必更改第二个语句的变量名称.但考虑使用有意义的变量名称.