2012-02-25 37 views
-1

可能重复:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given inMySQL的PHP​​函数选择

function arr($string) 
    { 
     $tank5 = "SELECT url FROM `db`.`tank` WHERE url LIKE {$string}"; 
     $result5 = mysql_query($tank5); 
      if (!$result5) { 
    die('Invalid query: ' . mysql_error()); 
} 

     $parts2 = array(); 
     while ($p = mysql_fetch_array($result5)) { 
      $parts2[] = $p['url']; 
     } 

     // return the array created. 
     return $parts2; 
    } 

    $array5 = arr('lol.com');  
    print_r($array5); 

为什么不把上面的代码工作。我得到的错误是
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /usr/local/...
所以我想这不是数据库连接问题。任何想法?

+0

@minitech:你好,这个问题已经解决了。查询需要百分号来查找类似的域。无论如何,我更新了连接检查的代码。 – sg552 2012-02-25 17:25:55

回答

3

很可能,您使用的是LIKE子句,但未将通配符传递给$string。因此,它只会找到完全匹配。因为你没有引用输入值(假设函数的输入参数还没有引号,这看起来不太可能),而是围绕着$string%和单引号。

$tank5 = "SELECT url FROM `db`.`tank` WHERE url LIKE '%$string%'"; 

我们假定调用此函数之前,你已经逃脱$string针对SQL注入这样的:

$string = 'lol.com'; 
$string = mysql_real_escape_string($string); 
$arr = arr($string); 
+0

非常感谢。这是问题,百分比符号。我知道查询需要百分比符号,因为我从昨天开始就忙于这件事。我忘了那件事。再次感谢。 – sg552 2012-02-25 17:32:19

2

您在查询中没有执行任何错误检查,所以难怪您的脚本打破查询失败。如何做正确的错误检查the manual或本reference question.

例概述:

$result5 = mysql_query($tank5); 
if (!$result5) 
{ trigger_error("mySQL error: ".mysql_error()); // output the error 
    die(); 
} 
在您的具体情况

,问题可能是你没有包装你的搜索字符串中,像这样的报价:

$tank5 = "SELECT url FROM `db`.`tank` WHERE url LIKE '{$string}'"; 
+0

感谢您的建议。我想如果我使用这种''array5 = arr('lol.com')之类的函数之外的撇号,'它会起作用。我感谢您的帮助。 – sg552 2012-02-25 17:29:24