Проблема сценариев PHP MSSQL (Предупреждение: не ресурс MS SQL Link) - PullRequest
0 голосов
/ 28 января 2011

Я получаю некоторые странные результаты при работе с пользовательским сценарием для проверки адресов электронной почты в базе данных.

У меня есть скрипт php, который запускается через командную строку для проверки адресов электронной почты:

Если я запускаю следующее через скрипт, я получаю результат:

./verify-valid-email-account.php test@test.com
test@test.com is invalid

Сценарий предназначен для приема нескольких аргументов (адресов электронной почты) и возвращает результат для каждого:

./verify-valid-email-account.php test@test.com test2@test.com
test@test.com is invalid
test2@test.com is invalid

Однако проблема возникает, когда я пытаюсь сделать 3 или более адресов электронной почты за звонок, я получаю следующую ошибку:

./verify-valid-email-account.php test@test.com test2@test.com test3@test.com
test@test.com is invalid
test2@test.com 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
test@test.com 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);
  }

Как видите, я открываю соединение с базой данных и выбираю базу данных перед циклом for. В цикле for я выбираю оператор каждую итерацию и обрабатываю результат. Когда я заканчиваю цикл for, я закрываю соединение с базой данных.

Я попытался установить переменные query, result и numRows в null, но это, похоже, не решает проблему.

[Обновление 1]

В соответствии с рекомендацией Dereleased ниже, я добавил вышеуказанный код ошибки. Вывод теперь показывает это:

./verify-valid-email-account.php test@test.com test2@test.com test3@test.com
test@test.com is invalid
test2@test.com 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, похоже, она меняет контекст после двух итераций цикла for.

1 Ответ

0 голосов
/ 28 января 2011

Нужно посмотреть, что делает остальная часть сценария, но с какой стати это снова вызывается из командной строки?

Попробуйте сделать это, для начала:

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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...