PHP循环中的SQL SELECT

时间:2010-12-28 01:25:39

标签: php mysql loops while-loop

我想要从中选择数据的一组表和字段。我尝试了下面的代码没有成功。任何人都可以向我解释为什么这不起作用,如果可能的话,如何让它发挥作用。

$fields = "table1.field1, table2.field2, table3.field3, table4.field4";
$tables = "table1, table2, table3, table4";
$table = explode(', ', $tables); //explode the tables string
$field = explode(', ', $fields); //explode the fields string


$i=1;
while ($i<=4) { 
$sql = 'SELECT ' . $field[$i] . ' FROM ' . $table[$i] . ' WHERE ' . $field[$i] . ' LIKE "%' . $str . '%";';
$results = $readConn->query($sql);
$i++;
var_dump($results);
}

3 个答案:

答案 0 :(得分:2)

我能看到两件事:

1)您忘记了SELECT关键字:

$sql = 'SELECT ' .  $field[$i] . ' FROM ' ...etc...

2)在SQL中,字符串应该使用单引号进行转义,而不是双引号。结果应该类似LIKE '%foo%'而不是LIKE "%foo%"

答案 1 :(得分:1)

您在生成的查询中缺少SELECT关键字。如果你打印出$ sql,那么问题就显而易见了。顺便说一句,根据$ str的来源,你可能会让自己容易受到SQL注入攻击,除非你正确地逃避它。

答案 2 :(得分:0)

您正在创建的SQL如下所示:

SELECT table2.field2 FROM table2 WHERE table2.field2 LIKE "%%";
SELECT table3.field3 FROM table3 WHERE table3.field3 LIKE "%%";
SELECT table4.field4 FROM table4 WHERE table4.field4 LIKE "%%";
SELECT  FROM  WHERE  LIKE "%%";

我不知道你在设置什么是$ str,所以我没有把它包含在这里。 SQL应该运行,它看起来很好,除了最后一个...你想要调整你的循环,&lt; 4,而不是&lt; = 4

您确定您拥有与数据库的有效连接吗?您是否因此返回NULL或其他内容,或出错?

另外,Mark的答案中的第2项。 另外,就个人而言,我发现这更具可读性。

$sql = sprintf("SELECT %s FROM %s WHERE %s LIKE '%%s%'", $field[$i], $table[$i], $field[$i], $str);

比这个

$sql = 'SELECT ' . $field[$i] . ' FROM ' . $table[$i] . ' WHERE ' . $field[$i] . ' LIKE "%' . $str . '%";';