[英]Is this this mysql/php correct to delete a row?
<?php
$id = $_POST['dr'];
$dbhost = 'star***.***.edu';
$dbuser = '***4123';
$dbpass = '*****';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = "DELETE FROM address
WHERE idnum=\"".$id\"";
mysql_select_db('***4123');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not delete data: ' . mysql_error());
}
echo "Deleted data successfully\n";
mysql_close($conn);
?>
因此,仅需要一些帮助来弄清楚这在语法上是否正确。 应该通过ajax发送的是我要在表地址中删除的行的ID号
您的查询语法看起来不正确,尤其是因为对"
的转义已完全取消。您还应该在查询中使用单引号来分隔字符串,而不要使用双引号。
$sql = "DELETE FROM address WHERE idnum = " . $id;
这应该工作。 假设id是数字(即整数,浮点数,十进制等)。 您应该始终对提供的数据进行验证或至少进行清理,然后再将其带到数据库附近,否则有人可以通过SQL轻松注入您的站点。 应该使用的快速清洁方法是将过帐的值转换为整数。
$id = (int) $_POST [ 'dr' ];
使用PDO。 更容易的错误处理和更好的数据清理方式:
<?php
try {
$db = new PDO ('mysql:host=star***.***.edu;dbname=***4123', '***4123', '*****');
}
catch (Exception $e)
{
die('Could not connect: ' . $e->getMessage());
}
$statement = $db->prepare('DELETE FROM address WHERE idnum=?');
$statement->bindParam(1, $_POST['dr']);
if (false === $statement->execute())
{
die('Could not delete data: ' . print_r($pdo->errorInfo(),true));
}
PDO自动关闭连接,因此无需执行其他操作。
<?php
$id = mysql_real_escape_string($_POST['dr']);
$dbhost = 'star***.***.edu';
$dbuser = '***4123';
$dbpass = '*****';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysql_error());
}
$sql = "DELETE FROM address
WHERE idnum= '$id' ";
mysql_select_db('***4123');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
die('Could not delete data: ' . mysql_error());
}
echo "Deleted data successfully\n";
mysql_close($conn);
?>
尝试使用MySQLi,Prepared Statement,不要信任输入
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.