从数据库
删除多值我使用这个文件从服务器从数据库
<?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);
?>
删除记录,但我无法从数据库中删除记录。查询是没有任何错误执行,但它不能从表
$query = mysql_query('DELETE FROM `record` WHERE `id` IN (' . implode(',', array_map('intval', $id)) . ')');
这也解决了OP的SQL注入漏洞。请详细说明这里发生的事情,即删除'foreach'来代替这个,数组值的转换/消毒以及不运行多个查询的性能改进。 – zamnuts 2014-08-29 12:13:37
MySQL扩展从PHP 5.5.0开始已弃用。您应该考虑使用MySQLi或PDO_MySQL扩展。 – anna 2014-08-29 12:15:36
这只会在$ 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);
}
'$ id'是一个数组吗? – anna 2014-08-29 12:09:58
一定要逃避$价值,因为它是用户提供的并且需要注射。更好的是,在PDO中使用准备好的语句。 – user1032531 2014-08-29 12:12:08
显然'$ id'返回错误的值,因为语法很好 – younis 2014-08-29 12:21:53