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