2011-01-28 173 views
0

使用自定义脚本来验证数据库中的电子邮件地址时,我收到了一些奇怪的结果。PHP MSSQL脚本问题(警告:不是MS SQL链接资源)

我有一个PHP脚本,通过命令行运行来验证电子邮件地址:

如果我运行通过脚本下面我得到的结果是:

./verify-valid-email-account.php [email protected] 
[email protected] is invalid 

的脚本设计接受多个参数(电子邮件地址),并返回每个结果:

./verify-valid-email-account.php [email protected] [email protected] 
[email protected] is invalid 
[email protected] is invalid 

然而,这个问题进来时,我尝试做每通话3个或多个电子邮件地址,我得到后续荷兰国际集团的错误:

./verify-valid-email-account.php [email protected] [email protected] [email protected] 
[email protected] is invalid 
[email protected] is invalid 
Warning: mssql_query(): 4 is not a valid MS SQL-Link resource in /scripts/verify-valid-email-account.php on line 46 

Warning: mssql_num_rows(): supplied argument is not a valid MS SQL-result resource in /scripts/verify-valid-email-account.php on line 48 
[email protected] is invalid 

Warning: mssql_close(): 4 is not a valid MS SQL-Link resource in /scripts/verify-valid-email-account.php on line 62 

如果我尝试调用5个电子邮件地址给脚本的前两将正常工作,最后3将返回下面的同样的错误。

这里是我的脚本的一部分:

if ($argc >= 2) 
{ 
    //connection to the database 
    $dbhandle = mssql_connect($myServer, $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer"); 

    //select a database to work with 
    $selected = mssql_select_db($myDB, $dbhandle) or die("Couldn't open database $myDB"); 

    for($i=1; $i<$argc; $i++) { 
    $query = "<removed as it is huge>"; 
    $result = mssql_query($query); 

if (!$result) { 
echo 'Error: ', mssql_get_last_message(), "\n"; 
continue;      
} 

    $numRows = mssql_num_rows($result); 
    if ($numRows == 0) 
    { 
     echo $argEmail . " is invalid\n"; 
    } else { 
     echo $argEmail . " is valid\n"; 
    } 
    } 

    //close the connection to the DB. 
    mssql_close($dbhandle); 
    } 

正如你可以看到我打开到数据库的连接和前选择dabase for循环。在for循环中,我会在每次迭代时选择语句并处理结果。当我完成for循环时,关闭数据库连接。

我试着将查询,结果和numRows变量设置为null,但这似乎并没有解决问题。

[更新1]

每Dereleased的建议下面,我加入上述错误代码。现在的输出显示如下:

./verify-valid-email-account.php [email protected] [email protected] [email protected] 
[email protected] is invalid 
[email protected] is invalid 
Warning: mssql_query(): 4 is not a valid MS SQL-Link resource in /scripts/verify-valid-email-account.php on line 48 
Error: Changed database context to 'EmTest'. 

我使用的数据库是EMTEST,看来,它的两个迭代循环后改变环境。

回答

0

需要查看脚本的其余部分在做什么,但为什么地球上又是通过命令行调用的呢?

尝试这样做,对于初学者:

if ($argc >= 2 && false) 

请试试这个和后期输出:

if ($argc >= 2) 
    { 
     //connection to the database 
     $dbhandle = mssql_connect($myServer, $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer"); 

     //select a database to work with 
     $selected = mssql_select_db($myDB, $dbhandle) or die("Couldn't open database $myDB");  

      for($i=1; $i<$argc; $i++) { 
        $query = "<removed as it is huge>"; 
        $result = mssql_query($query); 
        // add these lines 
        if (!$result) { 
         echo 'Error: ', mssql_get_last_message(), "\n"; 
         continue; 
        } 
        $numRows = mssql_num_rows($result); 
        if ($numRows == 0) 
        { 
         echo $argEmail . " is invalid\n"; 
        } else { 
         echo $argEmail . " is valid\n"; 
        } 
      } 

     //close the connection to the DB. 
     mssql_close($dbhandle); 
     } 
+0

这是enitre脚本(除了数据库的IP地址信息,这是在if语句之外)。我打算在Perl中这样做,但我不想尝试下载4个不同的包来使其工作。 – jinanwow 2011-01-28 17:34:21