下面是我的PHP代码,但它没有更新数据,而是给了我以下错误:
您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解在第2*行"附近使用的正确语法
我什么都试过了,但都没用。
<?php
include 'includes/connection.php';
if(!isset($_POST['submit'])) {
mysql_query("UPDATE student SET `name`='$_POST[name]' , `email`='$_POST[email]' , `dob`='$_POST[dob]' , `phone`='$_POST[phone]' , `college`='$_POST[college]' , `address`='$_POST[address]' , `state`='$_POST[state]' , `country`='$_POST[country]' WHERE id = $_POST[id]") or die(mysql_error());
}
?>
Student has been modified! <br/>
<a href="index.php">Go to MAIN MENU</a>
同一个查询在同一台服务器上使用不同的字段。但我不知道这是怎么回事。
您的查询是单行,但错误在第2行
您的代码是不安全的,您没有对值进行清理,错误来自于这个事实。mysql_*
函数现在因此类错误而被弃用。
您的代码也有一个逻辑问题:如果用户向服务器提交了信息,您希望处理更改,但您的条件if (!isset($_POST['submit']))
表示如果未设置,则会尝试在不应该更新信息的时候更新信息。
使用PDO(假设连接成功)
include 'includes/connection.php';
if (isset($_POST['submit'])) {
$statement = $db->prepare("UPDATE student SET `name`=:name , `email`=:email , `dob`=:dob , `phone`=:phone , `college`=:college , `address`=:address , `state`=:state , `country`=:country WHERE id = :id");
$statement->execute(array(
':name' => $_POST['name'],
':email' => $_POST['email'],
':dob' => $_POST['dob'],
':phone' => $_POST['phone'],
':college' => $_POST['college'],
':address' => $_POST['address'],
':state' => $_POST['state'],
':country' => $_POST['country'],
':id' => $_POST['id']
));
}
使用mysql_*
函数
include 'includes/connection.php';
if (isset($_POST['submit'])) {
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$dob = mysql_real_escape_string($_POST['dob']);
$phone = mysql_real_escape_string($_POST['phone']);
$college = mysql_real_escape_string($_POST['college']);
$address = mysql_real_escape_string($_POST['address']);
$state = mysql_real_escape_string($_POST['state']);
$country = mysql_real_escape_string($_POST['country']);
$id = mysql_real_escape_string($_POST['id']);
/**
* For debugging purposes
*/
$query = "UPDATE student SET `name`='$name' , `email`='$email' , `dob`='$dob' , `phone`='$phone' , `college`='$college' , `address`='$address' , `state`='$state' , `country`='$country' WHERE id = '$id'";
mysql_query($query) or die(mysql_error());
/**
* For debugging purposes
*/
echo "<pre>Last query: $query</pre>";
}
注意,$id
应该:
- 使用
mysql_real_escape_string
进行转义,并在查询中使用引号 - 或者用
intval
转换成int(假设是数字索引)
哇,哇,哇!您没有验证任何数据并使用mysql_query()。通过SQL注入攻击服务器很容易!
尝试PDO:http://php.net/manual/en/book.pdo.php
返回主题:
请给我们看$_POST:的内容
print_r($_POST);
和完整的SQL字符串:
$sql = "UPDATE student SET `name`='$_POST[name]' , `email`='$_POST[email]' , `dob`='$_POST[dob]' , `phone`='$_POST[phone]' , `college`='$_POST[college]' , `address`='$_POST[address]' , `state`='$_POST[state]' , `country`='$_POST[country]' WHERE id = $_POST[id]";
echo $sql;
SQL看起来没那么好。实际上,您必须输出$_POST值,如下所示:
$_POST['name']
请帮自己一个忙并使用PDO!:-)
编辑1:逃离示例:
如果你不想使用PDO,至少可以这样尝试:
$sql = "UPDATE student
SET `name` = '". mysql_real_escape_string($_POST['name']) ."',
`email` = '". mysql_real_escape_string($_POST['email']) ."',
`dob` = '". mysql_real_escape_string($_POST['dob']) ."',
`phone` = '". mysql_real_escape_string($_POST['phone']) ."',
`college` = '". mysql_real_escape_string($_POST['college']) ."',
`address` = '". mysql_real_escape_string($_POST['address']) ."',
`state` = '". mysql_real_escape_string($_POST['state']) ."',
`country` = '". mysql_real_escape_string($_POST['country']) ."'
WHERE id = " . mysql_real_escape_string($_POST['id']);