这个PHP代码有错误吗?

时间:2011-03-14 04:45:53

标签: php mysql sql

这是否有任何问题,因为我没有返回输出?提前感谢。

$question_text = $_POST['question_text'];

$first_word = explode(" ", $question_text);

$query ="SELECT c.field_name,t.category_name, d.domain_name FROM category_fields c, taxonomy_category t,  taxonomy_domain d
 WHERE c.category_Id = t.category_Id AND t.domain_Id = d.domain_Id
 AND c.field_name = '$first_word'";

我已将代码更改为此但仍然没有输出。我显示它们的方式有问题吗?谢谢

$ question_text = $ _POST ['question_text'];

list($ first_word)= explode('',$ question_text);

$ query =“SELECT c.field_name,t.category_name,d.domain_name FROM category_fields c,taxonomy_category t,taxonomy_domain d WHERE c.category_Id = t.category_Id AND t.domain_Id = d.domain_Id AND c.field_name =' ” .mysql_escape_string($ first_word [0])。 “'”;

$ result = mysql_query($ query);

while($ row = mysql_fetch_array($ result,MYSQL_ASSOC))

{

echo“关键字:{$ row ['c.field_name']}”。          “类别:{$ row ['t.category_name']}”。          “域名:{$ row ['d.domain_name']}”; }

>

4 个答案:

答案 0 :(得分:1)

$ first_word是您想要的查询中的数组,而不是字符串 $ first_word [0]

将任何用户提交的值直接放入sql查询也是非常不安全的,应始终对其进行清理。

答案 1 :(得分:1)

而不是explode行,您可以使用以下来获取正确的SQL查询:

$first_word = mysql_real_escape_string(strtok($question_text, " "));

字符串的strtok剪切直到第一个空格。并且必须使用转义函数来防止脚本受到SQL攻击。

答案 2 :(得分:0)

list($first_word) = explode(' ', $question_text);

这应该可以解决问题。 清理数据库输入!

答案 3 :(得分:0)

$first_word = explode(" ", $question_text);之后 $first_word是一个数组,因为explode返回数组

因此

$query ="SELECT c.field_name,t.category_name, d.domain_name FROM category_fields c, taxonomy_category t,  taxonomy_domain d
 WHERE c.category_Id = t.category_Id AND t.domain_Id = d.domain_Id
 AND c.field_name = '$first_word'";

应该是

$query ="SELECT c.field_name,t.category_name, d.domain_name FROM category_fields c, taxonomy_category t,  taxonomy_domain d
 WHERE c.category_Id = t.category_Id AND t.domain_Id = d.domain_Id
 AND c.field_name = '".mysql_escape_string($first_word[0])."'";

阅读http://php.net/manual/en/function.mysql-escape-string.php了解mysql_escape_string的内容。