首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqli_error:更新表格(Procedural样式)

mysqli_error:更新表格(Procedural样式)
EN

Stack Overflow用户
提问于 2012-09-06 04:24:33
回答 4查看 1.5K关注 0票数 0

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

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

代码语言:javascript
复制
<?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>";
    }
}
?>

更新表单

代码语言:javascript
复制
<form action="update.php" method="post">
    <p>First name<input type="text" name="fname" value="<?php echo "$person[people_fname]" ?>" /></p>
    <p>Last name<input type="text" name="lname" value="<?php echo "$person[people_lname]" ?>" /></p>
    <p>Your age<input type="text" name="age" value="<?php echo "$person[people_age]" ?>" /></p>
    <p>Your hobby<input type="text" name="hobby" value="<?php echo "$person[people_hobby]" ?>" /></p>
    <input type="hidden" name="id" value="<?php echo $_GET['id'] ?>" />        
    <input type="submit" name="submit" value="MODIFY" />
</form>`

当我提交表单时,我收到以下错误消息

代码语言:javascript
复制
Warning: mysqli_error() expects parameter 1 to be mysqli, boolean given in C:\xampp\htdocs\sandbox\update.php on line 39

我意识到这告诉我问题出在

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

因此,我尝试将sqli代码作为第二个参数放入(我意识到这与放入变量相同,但这是万不得已的办法),但它看起来并不正确,仍然不起作用。我也看过php.net,但从他们给出的例子中找不出答案

请告诉我,我以为这是为了简单?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-06 04:28:25

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

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

我想你的意思是把$dbc传递给mysqli_error。

票数 0
EN

Stack Overflow用户

发布于 2012-09-06 04:28:38

代码语言:javascript
复制
$update = "UPDATE people
           SET    people_fname = $fname,
                  people_lname = $lname,
                  people_age = $age,
                  people_hobby = $hobby
           WHERE  people_id = $id";

您需要将变量引起来:

代码语言:javascript
复制
$update = "UPDATE people
           SET    people_fname = '$fname',
                  people_lname = '$lname',
                  people_age = '$age',
                  people_hobby = '$hobby'
           WHERE  people_id = '$id'";

然而,

你应该检查绑定参数-你接受用户输入并将其直接写入你的数据库,这意味着恶意用户可以做各种各样的恶作剧。

请看一下mysqli's bind_param的手册页面--有很多示例代码片段。

票数 1
EN

Stack Overflow用户

发布于 2012-09-06 04:38:05

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

代码语言:javascript
复制
@mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME)

“@”可能以某种方式隐藏了连接错误。

另外,请告诉我你在现实生活中做数据消毒,对吗?如果没有,则必须对所有POST运行mysqli_real_escape_string()并获取数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12289203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档