从数据库

从数据库

问题描述:

删除多值我使用这个文件从服务器从数据库

<?php 

$dbhandle = mysql_connect("localhost", "admin", "admin") or die(mysql_error()) ; 
$selected = mysql_select_db("dbname" ,$dbhandle) or die(mysql_error()) ; 


$id=$_POST['id']; 

foreach($id as $value) 
{ 

$query = mysql_query("DELETE FROM `record` WHERE `id`=$value"); 
} 
mysql_close($dbhandle); 
?> 

删除记录,但我无法从数据库中删除记录。查询是没有任何错误执行,但它不能从表

+0

'$ id'是一个数组吗? – anna 2014-08-29 12:09:58

+1

一定要逃避$价值,因为它是用户提供的并且需要注射。更好的是,在PDO中使用准备好的语句。 – user1032531 2014-08-29 12:12:08

+1

显然'$ id'返回错误的值,因为语法很好 – younis 2014-08-29 12:21:53

$query = mysql_query('DELETE FROM `record` WHERE `id` IN (' . implode(',', array_map('intval', $id)) . ')'); 
+0

这也解决了OP的SQL注入漏洞。请详细说明这里发生的事情,即删除'foreach'来代替这个,数组值的转换/消毒以及不运行多个查询的性能改进。 – zamnuts 2014-08-29 12:13:37

+0

MySQL扩展从PHP 5.5.0开始已弃用。您应该考虑使用MySQLi或PDO_MySQL扩展。 – anna 2014-08-29 12:15:36

+0

这只会在$ id包含整数时才起作用。 – user1032531 2014-08-29 12:19:05

删除记录这会工作,即使$id数组不包含整数。

class db { 
    private static $instance = NULL; 
    private function __construct() {} //Make private 
    private function __clone(){} //Make private 
    public static function db() //Get instance of DB 
    { 
     if (!self::$instance) 
     { 
      self::$instance = new PDO("mysql:host=localhost;dbname=myDB;charset=utf8",'myUsername','myPassword',array(PDO::ATTR_EMULATE_PREPARES=>false,PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC)); 
     } 
     return self::$instance; 
    } 
} 

if(count($ids)) { //Make sure you don't have an empty data set. 
    $qMarks = str_repeat('?,', count($ids)-1) . '?'; 
    $sql ="DELETE FROM `record` WHERE `id` IN ({$qMarks})"; 
    $stmt = $db::db->prepare($sql); 
    $stmt->execute($id); 
}