Php 在一个查询中更新两个表

Php 在一个查询中更新两个表,php,Php,我无法在一个查询中更新两个表。还有别的办法吗?下面是我的代码示例 $id = $_GET['idnum']; $txtEditUsername=$_GET['txtEditUsername']; $txtlname=$_GET['txtlname']; $txtfname=$_GET['txtfname']; $txtgender=$_GET['txtgender']; $txtbdate=$_GET['txtbdate']; $txtnatio

我无法在一个查询中更新两个表。还有别的办法吗?下面是我的代码示例

 $id = $_GET['idnum'];
    $txtEditUsername=$_GET['txtEditUsername'];
    $txtlname=$_GET['txtlname'];
    $txtfname=$_GET['txtfname'];
    $txtgender=$_GET['txtgender'];
    $txtbdate=$_GET['txtbdate'];
    $txtnationality=$_GET['txtnationality'];
    $txtcnum=$_GET['txtcnum'];
    $txtaddress=$_GET['txtaddress'];

    $sql = "UPDATE users SET u_usernamee = '$txtEditUsername' WHERE u_uid = '$id'";
    $sql = "UPDATE people SET ppl_lname = '$txtlname', ppl_fname = '$txtfname', ppl_gender = '$txtgender', ppl_bdate = '$txtbdate', ppl_nationality = '$txtnationality', ppl_cnum = '$txtcnum', ppl_address = '$txtaddress' WHERE ppl_id = '$id'";

    if (mysqli_query($conn, $sql)) {
    } else {
        echo "Error ".mysqli_error($conn);
    }

您应该为变量使用不同的名称,如
$sql
$sql2
,但您甚至可以使用一个查询,请尝试以下操作:

UPDATE users, people
SET users.u_username = '$txtEditUsername',
    people.ppl_lname = '$txtlname',
    people.ppl_fname = '$txtfname',
    // AND SO ON
WHERE
    users.u_uid = '$id'
AND people.ppl_id = '$id';
编辑

然而,正如其他人所说,您可能是sql注入的受害者。
尝试在PDO中使用prepared语句,

您可以像这样使用mysqli\u multi\u查询

$sql = "UPDATE users SET u_usernamee = '$txtEditUsername' WHERE u_uid = '$id'";
$sql .= "UPDATE people SET ppl_lname = '$txtlname', ppl_fname = '$txtfname', 

ppl_gender = '$txtgender', ppl_bdate = '$txtbdate', ppl_nationality = '$txtnationality', ppl_cnum = '$txtcnum', ppl_address = '$txtaddress' WHERE ppl_id = '$id'";

if (mysqli_multi_query($conn, $query)) {
    do {
        /* sStockage du premier résultat */
        if ($result = mysqli_store_result($conn)) {
            while ($row = mysqli_fetch_row($result)) {
                printf("%s\n", $row[0]);
            }
            mysqli_free_result($result);
        }
        /* Affichage d'une séparation */
        if (mysqli_more_results($conn)) {
            printf("-----------------\n");
        }
    } while (mysqli_next_result($conn));
}
在这里,您可以了解更多信息

问题在于:

$sql=“更新用户…”;
$sql=“更新人员…”;
您使用同一个变量执行两个不同的查询。第二条语句覆盖第一条语句,并将其删除。这就是为什么
users
表没有更新的原因

$usersSQL=“更新用户集u_usernamee='$txtEditUsername',其中u_uid='$id';
if(!mysqli_query($conn$usersSQL)){
echo“更新用户表时出错:”.mysqli_错误($conn);
/最后,考虑退出函数。
}
$peopleSQL=“更新人员设置ppl_lname=”$txtlname',ppl_fname=”$txtfname',ppl_gender=”$txtgenerd',ppl_bdate=”$txtbdate',ppl_国籍=“$txtnationality',ppl_cnum=”$txtcnum',ppl_地址=“$txtdAddress其中ppl_id=”$id';
if(!mysqli_query($conn,$peopleSQL)){
echo“更新人员表时出错:”.mysqli_错误($conn);
}
最后不能不提 永远不要使用未初始化的数据始终过滤和验证用户数据。 添加验证后,您将避免向查询传递无效值(例如:
ppl\u lname
的长度最大为50个字符,用户发送51个字符)

最重要的是,决不要将用户的数据直接用于SQL查询,因为这样会使数据库面临严重的风险


阅读此代码,否则,他们将解释使用未初始化数据时出现的问题。

您非常容易受到使用该代码的SQL注入攻击,您应该使用准备好的语句,无论数据的来源如何。永远不要信任任何用户提交的输入,无论您是否信任该用户