将_POST变量传递给Mysql WHERE子句

时间:2013-10-23 15:32:59

标签: php mysql variables

<?php
//Connect to DB
$dbcnx = @mysql_connect("$db_host", $db_user, "$db_password");
if (!$dbcnx) {
 echo( "<P>Unable to connect to the " .
    "database server at this time.</P>" );
 exit();
}
mysql_select_db("daily_audit", $dbcnx);
// Request the text of all the hosts
if(!empty($_POST['checklist'])) {
    foreach($_POST['checklist'] as $check) {
        $result = mysql_query(
           "DELETE FROM hosts_list WHERE IP_Address = %s ", $check);
if (!$result) {
 echo("<P>Error performing query: " .
     mysql_error() . "</P>");
 exit();
}
    }
}
?>

我遇到运行以下代码的问题。我已经确认_POST变量包含数据,但我很确定我的SQL查询是如何处理的。对不起,我是PHP n00b,我想了解如何纠正这个问题。我知道查询可能需要''围绕IP地址,这使得这个棘手。在此先感谢所有人。

2 个答案:

答案 0 :(得分:5)

mysql_query函数无法格式化字符串。

您可能正在考虑sprintf()

$query = sprintf("DELETE FROM hosts_list
                  WHERE IP_Address = %s", mysql_real_escape_string($check));
$result = mysql_query($query);

考虑切换到PDOmysqli,因为现在不推荐使用mysql扩展名。

答案 1 :(得分:1)

mysql_query()无法格式化您的查询。

您可能正在寻找sprintf()

$result = mysql_query(
    sprintf("DELETE FROM hosts_list WHERE IP_Address = %s ", $check) );

请注意,您的代码容易受到SQL注入攻击。在数据库查询中使用之前,应始终清理用户输入。更好的是,切换到MySQLi / PDO并使用预处理语句。