Я получаю некоторые странные результаты при работе с пользовательским сценарием для проверки адресов электронной почты в базе данных.
У меня есть скрипт 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.