我正在编写一个搜索表单,将人们的名字存储在一个数组中,然后想在PHP的结果页面上创建一个使用IN子句的查询(如果这是最好的方法;请随意指向另一个方向)。基本上该页面包含所有名称的复选框,因此可以检查一个,多个或所有名称。我尝试使用implode函数,但到目前为止都没有成功。
$yourName = implode("', '", $_POST['Your_name']);
if($dutyReq=="All" && $yourName!="All" ) $query="SELECT * FROM talent_eas WHERE Your_name IN ('$yourName')";
那看起来好吗?那会处理所有情况吗?我刚刚开始使用PHP,所以我不知道我在做什么。我试着搜索我的具体问题,但似乎没有多少使用IN子句。
答案 0 :(得分:1)
是的,那怎么用IN。以下是一些例子:
SELECT * FROM users WHERE name IN ('John','Jane');
SELECT * FROM some_table WHERE the_month IN ('January','April','September');
另外,请阅读SQL Injections。
征求意见:
你需要在内爆之前使用mysql_real_escape_string。所以你的代码应该是:
$yourName = implode("', '", mysql_real_escape_string($_POST['Your_name']));
答案 1 :(得分:0)
您可以使用
SELECT * FROM talent_eas WHERE Your_name IN('shail','jyoti');
我建议你阅读Mysql Injection,否则你的代码很容易被黑客入侵
答案 2 :(得分:0)
以下是阻止SQLi的几种方法
# 1. Map each name with escape function
$yourname = implode("', '", array_map('mysql_real_escape_string', $_POST['Your_name']));
# 2. Use PDO with prepare statement (with placeholders e.g. (?, ?, ?)
$placeholders = array_fill(0, sizeof($_POST['Your_name']), '?');
$stmt = $pdo->prepare('SELECT * FROM talent_eas WHERE Your_name IN ('.implode(', ', $placeholders).')';
$stmt->execute($_POST['Your_name']);