我想要从中选择数据的一组表和字段。我尝试了下面的代码没有成功。任何人都可以向我解释为什么这不起作用,如果可能的话,如何让它发挥作用。
$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);
}
答案 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 . '%";';