当我运行代码时,我将面临以下两个错误:
mysql_num_rows()期望参数1是资源,布尔
这种情况发生在文件的罕见行中。其余的都很好。
您的SQL语法有错误;查看手册与您的MySQL服务器版本相对应,以便使用正确的语法第1行"t"附近
是的,我明白了,它很脆弱。可能是一些奇怪的角色造成了这个问题,但我真的可以编辑它们,因为我把单词保存到数据库中,以便对它们进行md5处理。
我假设mysql_real_escape_string
将添加一些斜杠,这将给我另一个md5值。那么,我怎么能不编辑数据,同时确保脚本的安全呢?
require ("dbconnect.php");
$list = fopen("huge.txt","r");
//convert and save to db
while(!feof($list))
{
$word = fgets($list);
//check if already in db.
$check = mysql_query("SELECT id FROM `database` WHERE word='$word'") or
die(mysql_error());
if (mysql_num_rows($check)==0)
{
//rest of the codes
我添加die()
只是为了看看哪里出了问题。
对于问题1,如果只有一个数据库连接,则应该简单地不向mysql_num_rows()传递任何参数。
对于问题2,转义版本不应该产生不同的哈希,只要它已经保存到数据库中,然后再次从数据库中提取。一旦将转义字符串保存到数据库中,保存的版本就会有效地丢失转义字符。这就是为什么当您从数据库中提取转义值时看不到"they\are"的原因。
基本上,当您最初创建哈希时,应该为哈希输入使用字符串的非转义版本,然后转义可以保存到数据库的明文版本。然后,您可以随时从数据库中提取明文版本,rehash,它应该会创建一个匹配的哈希值。