繁体   English   中英

这是mysql / php正确删除行吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM