<?php
$connect = mssql_connect("192.168.2.2\magica", "sergey", "sergey");
$db = mssql_select_db("OrgTech", $connect);
$SP_get_ip_login = mssql_init("Get_IP_Login", $connect);
mssql_bind($SP_get_ip_login, '@ip', $IP, SQLVARCHAR, true, false, 50);
mssql_bind($SP_get_ip_login, '@login', $Login, SQLVARCHAR, true, false, 50);
$res = mssql_execute($SP_get_ip_login);
echo "<html>\n\t<head>\n\t\t<title>\n\t\t\tМоя страница\n\t\t</title>\n\t</head>\n\t<body>";
do
{
while ($row = mssql_fetch_row($res))
{
echo "\n\t\t$row[0] -- $row[1]<br>";
}
}
while (mssql_next_result($res));
mssql_free_result($res);
mssql_free_statement($SP_get_ip_login);
mssql_close($connect);
echo "\n\t</body>\n</html>";
?>
PHP MSSQL Как выполнить хранимую процедуру?
Вот весь мой нерабочий код:
Код:
В браузере получаю, что не может выполниться строка $res = mssql_execute($SP_get_ip_login); (line 7)
Цитата:
Warning: mssql_execute(): stored procedure execution failed in /var/www/SP_Get_IP_Login.php on line 7 Warning: mssql_fetch_row() expects parameter 1 to be resource, boolean given in /var/www/SP_Get_IP_Login.php on line 11 Warning: mssql_next_result() expects parameter 1 to be resource, boolean given in /var/www/SP_Get_IP_Login.php on line 16 Warning: mssql_free_result() expects parameter 1 to be resource, boolean given in /var/www/SP_Get_IP_Login.php on line 17
Если выполнять через запрос, то все работает
Код:
<?php
$connect = mssql_connect("192.168.2.2\magica", "sergey", "sergey");
$db = mssql_select_db("OrgTech", $connect);
$query = mssql_query("declare @IP nvarchar(50), @Login nvarchar(50) exec Get_IP_Login @IP = @IP output, @Login = @Login output select @IP as my_ip, @Login as my_login");
echo "<html>\n\t<head>\n\t\t<title>\n\t\t\tМоя страница\n\t\t</title>\n\t</head>\n\t<body>";
while($row = mssql_fetch_array($query))
{
$n = count($row)/2;
for($i = 0; $i < $n; $i ++)
{
echo "\n\t\t{$row[$i]}";
}
}
mssql_close($connect);
echo "\n\t</body>\n</html>";
?>
$connect = mssql_connect("192.168.2.2\magica", "sergey", "sergey");
$db = mssql_select_db("OrgTech", $connect);
$query = mssql_query("declare @IP nvarchar(50), @Login nvarchar(50) exec Get_IP_Login @IP = @IP output, @Login = @Login output select @IP as my_ip, @Login as my_login");
echo "<html>\n\t<head>\n\t\t<title>\n\t\t\tМоя страница\n\t\t</title>\n\t</head>\n\t<body>";
while($row = mssql_fetch_array($query))
{
$n = count($row)/2;
for($i = 0; $i < $n; $i ++)
{
echo "\n\t\t{$row[$i]}";
}
}
mssql_close($connect);
echo "\n\t</body>\n</html>";
?>
Хранимка просто возвращает в двух параметрах IP и логин того, кто ее вызвал.
Код:
if(!$res)
die (mssql_get_last_message());
while (mssql_next_result($res));
{
while ($row = mssql_fetch_row($res))
{
echo "\n\t\t$row[0] -- $row[1]<br>";
}
}
die (mssql_get_last_message());
while (mssql_next_result($res));
{
while ($row = mssql_fetch_row($res))
{
echo "\n\t\t$row[0] -- $row[1]<br>";
}
}
С виду только разница в регистре параметров есть.
В mssql_bind() третий параметр нужно передавать по ссылке?
Переделал код так:
Код:
<?php
$connect = mssql_connect("192.168.2.2\magica", "sergey", "sergey");
$db = mssql_select_db("OrgTech", $connect);
$SP_get_ip_login = mssql_init("Get_IP_Login", $connect);
$IP = 'a';
$Login = 'b';
mssql_bind($SP_get_ip_login, '@ip', &$IP, SQLVARCHAR, true, false, 50);
mssql_bind($SP_get_ip_login, '@login', &$Login, SQLVARCHAR, true, false, 50);
$res = mssql_execute($SP_get_ip_login);
if(!$res)
{
echo mssql_get_last_message();
exit;
}
while (mssql_next_result($res));
{
while ($row = mssql_fetch_row($res))
{
echo "\n\t\t$row[0] -- $row[1]<br>";
}
}
/*echo "<html>\n\t<head>\n\t\t<title>\n\t\t\tМоя страница\n\t\t</title>\n\t</head>\n\t<body>";
do
{
while ($row = mssql_fetch_row($res))
{
echo "\n\t\t$row[0] -- $row[1]<br>";
}
}
while (mssql_next_result($res));
mssql_free_result($res);*/
mssql_free_statement($SP_get_ip_login);
mssql_close($connect);
echo "\n\t</body>\n</html>";
?>
$connect = mssql_connect("192.168.2.2\magica", "sergey", "sergey");
$db = mssql_select_db("OrgTech", $connect);
$SP_get_ip_login = mssql_init("Get_IP_Login", $connect);
$IP = 'a';
$Login = 'b';
mssql_bind($SP_get_ip_login, '@ip', &$IP, SQLVARCHAR, true, false, 50);
mssql_bind($SP_get_ip_login, '@login', &$Login, SQLVARCHAR, true, false, 50);
$res = mssql_execute($SP_get_ip_login);
if(!$res)
{
echo mssql_get_last_message();
exit;
}
while (mssql_next_result($res));
{
while ($row = mssql_fetch_row($res))
{
echo "\n\t\t$row[0] -- $row[1]<br>";
}
}
/*echo "<html>\n\t<head>\n\t\t<title>\n\t\t\tМоя страница\n\t\t</title>\n\t</head>\n\t<body>";
do
{
while ($row = mssql_fetch_row($res))
{
echo "\n\t\t$row[0] -- $row[1]<br>";
}
}
while (mssql_next_result($res));
mssql_free_result($res);*/
mssql_free_statement($SP_get_ip_login);
mssql_close($connect);
echo "\n\t</body>\n</html>";
?>
Теперь ругается на mssql_bind($SP_get_ip_login, '@ip', &$IP, SQLVARCHAR, true, false, 50); (line 7)
Цитата:
Deprecated: Call-time pass-by-reference has been deprecated in /var/www/SP_Get_IP_Login.php on line 7 Deprecated: Call-time pass-by-reference has been deprecated in /var/www/SP_Get_IP_Login.php on line 8 Warning: mssql_execute(): stored procedure execution failed in /var/www/SP_Get_IP_Login.php on line 9 Changed database context to 'OrgTech'.
Как понять Call-time pass-by-reference has been deprecated? Google-переводчик: Во время вызова перейти по ссылке устарела
Переменная $IP успела поменять адрес? :confused:
Что возвращает mssql_get_last_message();?
Цитата:
Warning: mssql_execute(): stored procedure execution failed in /var/www/SP_Get_IP_Login.php on line 9 Changed database context to 'OrgTech'.
Это, что баг PHP? "Changed database context to" error when running query
if (! ($SP_get_ip_login = mssql_init("Get_IP_Login")))
die("err1");
mssql_bind($SP_get_ip_login, '@ip', $IP, SQLVARCHAR, true, false, 50)
or die("err2");
mssql_bind($SP_get_ip_login, '@login', $Login, SQLVARCHAR, true, false, 50)
or die("err3");
Нормально выполняются. die() выполняется на mssql_execute()
Остаётся только проверить настройку mssql в php, попробовать поставить уровень ошибок и сообщений другой - может покажет более внятное описание ошибки.