我正在使用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>";
}
}
?>
更新表格
<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>`
当我提交表单时,我收到以下错误消息
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,但无法从他们给出的例子中得出答案
请指教,我觉得这很简单?
答案 0 :(得分:1)
$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'";
<强>无论其强>
您应该查看绑定参数 - 您正在接受用户输入并将其直接写入数据库,这意味着恶意用户可以进行各种恶作剧。
查看mysqli's bind_param的手册页 - 有大量示例代码段。
答案 1 :(得分:0)
不要将$r
传递给mysqli_error。它接受一个可选的mysql链接,但无论如何都不接受查询结果。
在您的情况下,执行查询。评估为false,分配给$r
。分配的结果为false,导致您die(mysqli_error($r))
为$r
为假。
我认为您打算将$dbc
传递给mysqli_error。
答案 2 :(得分:0)
在我看来,问题在于数据库连接($ dbc)。因为你正在使用
@mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME)
'@'可能会以某种方式隐藏连接错误。
另外,请告诉我你在现实生活中正在进行数据清理,对吧?如果没有,你必须在所有POST和GET数据上运行mysqli_real_escape_string()。
答案 3 :(得分:-1)
//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);