我无法让mysqli_query检查现有的数据库值

时间:2014-02-04 06:34:26

标签: php

我有一个名为“Words”的MySQL表,其中一列名为“Word”,还有其他几个。我正在输入一个单词数组到下面的函数中,尝试检查每个单词是否存在,然后添加单词,如果没有。无法完全执行它。它不断抛出“无法执行查询”,因为数组中有很多单词。我已经测试了$ sql链接连接,所以我知道不是它。有什么建议吗?

//ADD NEW WORDS TO DATABASE IF THEY DON'T ALREADY EXIST function addwords($array) { foreach($array as $word) { $q1 = "SELECT Word FROM Words WHERE Word='$word'"; $checkWord = mysqli_query($sql, $q1); if (!$checkWord) { //IF THERE IS AN ERROR CONNECTING echo "Couldn't execute query <br />"; } if (mysqli_num_rows($checkWord) > 0) { //IF THE WORD EXISTS echo "That word exists, but you should remove this text later."; } else { //IF THE WORD DOESN'T EXIST $q2 = "INSERT INTO Words (Word) VALUES ('$word')"; mysqli_query($sql, $q2); } } //END FOREACH } //END FUNCTION

1 个答案:

答案 0 :(得分:0)

$sql是一个全局变量。您从未在函数中定义它或使用global关键字,因此PHP不了解它并且您的查询失败。您应该将其作为参数传递给function addwords($array)(将其设为function addwords($sql, $array))。

这称为变量范围;你应该阅读variable scope page in the manual

此外,您对SQL injection持开放态度。您需要使用prepared statements来阻止某人使用$word的值foo'; DROP TABLE Words --来管理您的数据库,或者使用foo' OR 1=1 --之类的值进行窥探。