作者tails32100 (Tails)
看板PHP
标题Re: [请益] SQL想请问多重条件查询的写法
时间Tue Jun 25 02:28:52 2013
※ 引述《qm29213039 (崩啾)》之铭言:
: 我现在想做一个查询系统
: 可以输入ID,名字...等属性去做查询,可以只输入一个或者多个查询条件去做查询
: GOOGLE看到有教学文是判断有没有GET到值
: 如果有GET到值,则SELECT GET到的值。
: 如果没有,就让它等於栏位的名称
: (例如: id = id,这样输出恒等於一,SELECT AND 1就等於没有这个选项)
原来还有这招,今天学到了Orz...
: 我的程式是这样写..
: if ($_GET['Name'] == ""){
: $Name = Name;
: }
: ELSE{
: $Name = $_GET[$Name]
: }
$_GET['Name'] ?
老话一句:注意SQL injection
: SELECT * FROM main_info WHERE Name = '$Name' AND ID = '$ID';
: 也就是说,当我ID跟NAME都有输入的时候...,SELECT语句会变成
: SELECT * FROM main_info WHERE Name = '$_GET[Name]' AND ID = '$_GET[ID]';
: 其中一个没有输入的时候,则会变成
: SELECT * FROM main_info WHERE Name = 'Name' AND ID = '$_GET[ID]';
: 然後这边就出现问题了
: 因为WHERE Name = 'Name'变成会去查Name的栏位有没有符合Name的结果
: 请问我该怎麽修正这个错误,或者是有比较好的方法可以解决这个问题呢?
Name = 'Name'
和
Name = Name
是两件不同的事情
理由嘛...
不知道有没有发现到
MySQL的表格名称和栏位名称可以用倒引号(``)括起来,代表的是一个变数
而单引号或双引号括起来的代表的是常数字串
所以上面两个运算式就会等价於下面这两个
1. `Name` = 'Name' (这样的写法就有点像PHP的 if ($Name == 'Name') )
2. `Name` = `Name` (当然每笔资料都会是True,如同 if ($Name == $Name) )
呃...再来应该可以BJ4了吧XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.126.68.4