我有一个名为“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
答案 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 --
之类的值进行窥探。