1

当我运行我的代码时,我面临接下来的 2 个错误:

mysql_num_rows() 期望参数 1 是资源,布尔值

这发生在文件的罕见行中。其余的工作得很好。

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“t”附近使用正确的语法

是的,我明白了,它很脆弱。它可能是一些奇怪的字符构成了这个问题,但我真的可以编辑它们,因为我将这些词保存到数据库以对它们进行 md5ing。

我假设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()只是为了让我看看有什么问题。

4

1 回答 1

1

对于问题 1,如果您只有一个数据库连接,您应该简单地不要将任何参数传递给 mysql_num_rows()。

对于问题2,转义版本应该不会产生不同的哈希,只要它已经保存到数据库中,然后再次从数据库中提取。将转义字符串保存到数据库后,保存的版本实际上会丢失转义字符。这就是为什么当您从数据库中提取转义值时看不到“他们”的原因。

基本上,当您最初创建哈希时,您应该使用字符串的非转义版本作为哈希输入,然后转义明文版本,然后将其保存到数据库中。然后,您可以随时从数据库中提取明文版本,重新散列,它应该创建一个匹配的散列值。

于 2012-03-26T17:27:27.530 回答