Php mysqli_错误:更新表(过程样式)

Php mysqli_错误:更新表(过程样式),php,mysqli,updating,Php,Mysqli,Updating,我正在使用PHP尝试更新mysqli表中的信息。我决定尝试使用mysqli而不是mysql。不幸的是,我似乎在任何地方都找不到我的答案,因为我还试图以程序化的方式完成它,因为我对OOP一无所知,而且(我找到的)所有教程都是OOP 下面是我创建的脚本。我添加了一些注释来说明我认为每个命令都在做什么 <?php DEFINE('DB_USER', 'root'); DEFINE('DB_PASS', 'password'); DEFINE('DB_NAME', 'test'); DEF

我正在使用PHP尝试更新mysqli表中的信息。我决定尝试使用mysqli而不是mysql。不幸的是,我似乎在任何地方都找不到我的答案,因为我还试图以程序化的方式完成它,因为我对OOP一无所知,而且(我找到的)所有教程都是OOP

下面是我创建的脚本。我添加了一些注释来说明我认为每个命令都在做什么

<?php    
DEFINE('DB_USER', 'root');
DEFINE('DB_PASS', 'password');
DEFINE('DB_NAME', 'test');
DEFINE('DB_HOST', 'localhost');

//connect to db
$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(mysqli_connect_error($dbc));
mysqli_set_charset($dbc, 'utf8');

//form not submitted
if(!isset($_POST['submit'])){

    $q = "SELECT * FROM people WHERE people_id = $_GET[id]";//compares id in database with id in address bar
    $r = mysqli_query($dbc, $q);//query the database
    $person = mysqli_fetch_array($r, MYSQLI_ASSOC);//returns results from the databse in the form of an array

}else{//form submitted

    $q = "SELECT * FROM people WHERE people_id = $_POST[id]";//compares id in database with id in form
    $r2 = mysqli_query($dbc, $q);//query the database
    $person = mysqli_fetch_array($r2, MYSQLI_ASSOC);//returns results from the database in an array

    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $age = $_POST['age'];
    $hobby = $_POST['hobby'];
    $id = $_POST['id'];

    //mysqli code to update the database
    $update = "UPDATE people
               SET    people_fname = $fname,
                      people_lname = $lname,
                      people_age = $age,
                      people_hobby = $hobby
               WHERE  people_id = $id";

    //the query that updates the database
    $r = @mysqli_query($dbc, $update) or die(mysqli_error($r));

    //1 row changed then echo the home page link
    if(mysqli_affected_rows($dbc) == 1){    
        echo "<a href=\"index.php\">home page</a>";
    }
}
?>
我意识到这告诉我问题出在

$r=@mysqli_query($dbc,$update)或die(mysqli_error($r))

因此,我尝试将sqli代码作为第二个参数(我意识到这与将变量作为第二个参数是一样的,但这是最后的手段),但它似乎不正确,仍然不起作用。我还查看了一个php.net,但无法从他们给出的示例中得出答案


请告知,我认为这应该很简单?

不要将
$r
传递给mysqli\u错误。它接受一个可选的mysql链接,但无论如何不接受查询结果

在您的情况下,将执行查询。其计算结果为false,分配给
$r
。赋值结果为false,导致调用
die(mysqli_error($r))
,其中
$r
为false

我想你是想把
$dbc
传递给mysqli\u error

$update = "UPDATE people
           SET    people_fname = $fname,
                  people_lname = $lname,
                  people_age = $age,
                  people_hobby = $hobby
           WHERE  people_id = $id";
您需要引用以下变量:

$update = "UPDATE people
           SET    people_fname = '$fname',
                  people_lname = '$lname',
                  people_age = '$age',
                  people_hobby = '$hobby'
           WHERE  people_id = '$id'";
但是

您应该查看绑定参数——您正在获取用户输入并将其直接写入数据库,这意味着恶意用户可以进行各种破坏


请看一下的手册页-有很多示例代码片段。

在我看来,问题在于数据库连接($dbc)。因为你正在使用

@mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME)
“@”可能以某种方式隐藏了连接错误

另外,请告诉我你在现实生活中进行数据清理,对吗?如果没有,您必须在所有帖子上运行mysqli\u real\u escape\u string()并获取数据。

您编写的

//returns results from the database in an array
$person = mysqli_fetch_array($r2, MYSQLI_ASSOC);
但是你应该写

//returns results from the database in an array
$person = mysqli_fetch_array(MYSQLI_ASSOC);

谢谢,我会试试的。是的,我会这样做,目前我只是在尝试使用php和mysqli,一旦我更好地理解了这一点,我将关注安全性…有很多东西需要学习,我不得不将其分解为我可以管理的部分。谢谢,这解决了更新问题。我将查看mysqli的bind_参数。过程风格函数需要一个
mysqli_结果
和一个可选的结果类型。你的答案行不通。
//returns results from the database in an array
$person = mysqli_fetch_array($r2, MYSQLI_ASSOC);
//returns results from the database in an array
$person = mysqli_fetch_array(MYSQLI_ASSOC);