如何使用PHP从MYSQL表中删除多行

3

我正在尝试学习PHP并遇到了一个问题。我会非常感激任何帮助。

我有一个数据库,看起来像这样:

ID USER  AGE
1  name1 18
2  name2 19
3  name3 20
etc etc

我想删除多条记录。这是我使用的代码:

<?php
$username = "root";
$password = "";
$hostname = "localhost"; 

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) 
 or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";

//select a database to work with
$selected = mysql_select_db("photo",$dbhandle) 
  or die("Could not select examples");

//execute 
echo "CONNECTED";
echo "</br>";

//Action
$delete_query = ("DELETE FROM _users WHERE age in(17,18,19)");

$result = mysql_query($delete_query);

echo 'Deleted';

mysql_close($dbhandle);
?>

当我通过查询age列来删除数据时,可以成功删除多个行。

但是,当我这样操作时:

$delete_query = ("DELETE FROM _users WHERE USER in(name1,name2,name3)");

什么也没有发生。这是因为它们是字符串吗?我该如何解决?

谢谢!

6个回答

2
查询语句不正确:
DELETE FROM _users WHERE USER in ('name1','name2','name3');

字符串必须加引号,否则MySQL会将其视为字段名(或关键字)。您的脚本中没有错误处理,否则您会看到错误消息。请始终按以下方式编写查询:

$result = mysql_query(...) or die(mysql_error());

这将准确地展示查询失败的原因(如果没有问题,就继续进行)。

只是因为我很好奇,如果字符串列表很大(比如说50个或更多项),你还会推荐这样做吗?还是有更好的处理大量项目的方法? - Kelvin Jayanoris
50并不算“大”,除非它们是长字符串。基于max_allowed_packet设置,查询存在长度限制。这更多是一个效率问题。查询编译时间与传输开销之间的权衡。在某些情况下,将事物分成2个或更多查询而不是单个巨大的查询可能更便宜。但只有基准测试才能告诉您那个点在哪里。 - Marc B

1
DELETE FROM _users WHERE USER in(name1,name2,name3)

MySQL认为name1、name2和name3是列名。请将它们用引号括起来。


1

使用单引号 '

 $delete_query = ("DELETE FROM _users WHERE `USER` in('name1','name2','name3')");

1
@RikudoSennin:为什么它不会呢? - genesis
现在它会(字符串上没有引号)。 - Madara's Ghost

0

Users是一个字符串,你需要引用它的值:

$delete_query = ("DELETE FROM _users WHERE USER in('name1','name2','name3')");

0

是的,这是因为它们是字符串。字符串需要正确引用,否则MySQL将无法将它们视为字符串。使用

$delete_query = ("DELETE FROM _users WHERE USER in('name1','name2','name3')");

0

你需要用引号将字符串括起来:WHERE USER in('name1', 'name2', 'name3')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接