ДВС всем народ! Что-то совсем голову сломал. Делаю так: Код (PHP): <?php $server = "myip,1433\MSSQLSERVER"; $connectionInfo = array( "Database"=>"MY_BD"); $conn = sqlsrv_connect($server, $connectionInfo); if (!$conn) { echo "Соединение не удалось, ошибка:"; die( print_r( sqlsrv_errors(), true)); } else { $stmt = mssql_init("my_stored_proc", $conn); $Server = "fs01"; $Vl = "vl514"; $CDate = $_GET['SelDate']; mssql_bind($stmt, "@Server", $Server, SQLVARCHAR, false); mssql_bind($stmt, "@Vl", $Vl, SQLVARCHAR, false); mssql_bind($stmt, "@CDate", $CDate, SQLVARCHAR, false); $result = mssql_execute($stmt); while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) { print "<td align='center'>".$row['size']."</td>"; print "<td align='center'>".$row['used_per']."</td>"; print "<td align='center'>".$row['used']."</td>"; print "<td align='center'>".$row['available']."</td>"; } } ?> В итоге выдется ошибка: [03-Feb-2016 11:08:47 Europe/Moscow] PHP Fatal error: Call to undefined function mssql_init() in C:\inetpub\wwwroot\file.php on line 107 Порылся в инете. Пишут мол не подключен модуль sql, но та же sqlsrv_query() прекрасно работает. Для mssql качал специальные библиотеки php_pdo_sqlsrv_56_nts.dll и php_sqlsrv_56_nts.dll. Они в PHP.ini подключены. Может mssql_init() и mssql_bind() в других библиотеках находятся? (на mssql_bind() еще не ругается, не доходит на нее я так понимаю, но в инете их в паре всегда пишут при этой ошибке).
Я еще начинающий программист. Не нашел полностью как с PDO работать. Непонятно как там происходит подключение к БД. Во всех темах в инете начинают с чего-то подобного: Код (PHP): $sql="CALL P_NAME_ID (?,?,?,?)"; $sth = $dbo->prepare($sql); $sth->bindParam(1, 'TFAM', PDO::PARAM_STR); $sth->bindParam(2, 'Post body', PDO::PARAM_STR); $sth->bindParam(3, $id, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 11); $sth->bindParam(4, $id_, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 11); $sth->execute(); Вроде ту все ясно, но как к БД подключится. Я поэтому иначал искать без PDO. Дайте ссылочку или пример. И еще совсем непонятно как действовать когда несколько выходных параметров в хранимой процедуре. Везде один параметр в примерах.
мне кажется где-то в интернете был манул по языку пхп. и кажется в нем есть вся необходимая информация.
Наверное есть. Но если бы он был понятным, я бы не спрашивал. Я уже лет 20 работаю в IT. Более неграмотно написаного мануала чем php.net пока не видел. Чтобы въехать там в какие-то более мене сложные вещи приходится перерыть гору инета. По тому же javascript, vbscript, powershell действительно достаточно мануала. Но вот разработчикам php.net я бы оторвал руки по самые яйца! З.Ы. Хотя в принципе другого ответа я и не ждал. Так, на всякий случай написал. Во всем инете ничего толкового не написано. Ну или все по кускам собирать приходится.
а я бы руки по самые яйца отрывал людям с нулевым скилом программиста. там дано избыточное описание инструментов. сочетать инструменты - задача головы программиста. если он не видит алгоритма - это не проблема авторов языка и составителей мануала. ни разу. это проблема той головы которая не может признать что у нее проблемы. не нашел как подключаться к серверу используя PDO? а ты вообще искал? а ты раздел PDO вообще открывал? а ту вообще гуглил? https://php.net/manual/en/pdo.connections.php - вот тут лично я вижу подключение к серверу. и не один раз. и вот благодаря мне у тебя уже есть подключение к субд. выполнить на нем процедуру сможешь или тоже за тебя поискать? 20 лет в айти, а поиском и мануалами не научился пользоваться. только руки по яйца дергать, ага. фи.
Забыл когда на брудершафт пили ТЫ! Видно из молодых да ранних. Не хочеш не отвечай, а за речью следи! К теме. В PDO_Param не нашел переменной типа float или чего-то подобного? Что использовать? PDO:aram_..? Код (PHP): <table cellpadding="1" cellspacing="0" border="1" bordercolor="#000000" width="100%"> <tr> <td align="center">Server</td> <td align="center">Vol</td> <td align="center">Share Size(K)</td> <td align="center">Vol Size(K)</td> <td align="center">Free(%)</td> </tr> <tr> <td align="center">fs01</td> <td align="center">vl514</td> <?php $Server = "fs01"; $Vol = "vl514"; $CDate = $_GET['SelDate']; $dbo = new PDO("sqlsrv:Server=myip,1433;Database=mybase"); $sql = "CALL my_Vol_Quota_SUM (:Server,:Vl,:CDate, :SQuota, :Size,:Free)"; $sth = $dbo->prepare($sql); $sth->bindParam(':Server', $Server, PDO::PARAM_STR); $sth->bindParam(':Vl', $Vl, PDO::PARAM_STR); $sth->bindParam(':CDate', $CDate, PDO::PARAM_STR); $sth->bindParam(':SQuota', $squota, PDO::PARAM_LOB|PDO::PARAM_INPUT_OUTPUT); $sth->bindParam(':Size', $size, PDO::PARAM_LOB|PDO::PARAM_INPUT_OUTPUT); $sth->bindParam(':Free', $free, PDO::PARAM_LOB|PDO::PARAM_INPUT_OUTPUT); $sth->execute(); print "<td align='center'>".$squota."</td>"; print "<td align='center'>".$size."</td>"; print "<td align='center'>".$free."</td>"; ?> </tr> </table> На выходе пустые значения выходных параметров. В логах PHP никаких ошибок.
anslating string for input param 5 to UCS-2: No mapping for the Unicode character exists in the target multi-byte code page. О чего выдал. В принципе смотрю не я первый с этим столкнулся, пока для себя никак решения не найду.
В общем такое чувство, что снова с кодировкой что-то не то. Вот окончательный вариант Код (PHP): <?php $pdo = new PDO("sqlsrv:Server=myip,1433;Database=mybase"); $sql = "CALL my_Vol_Size_SUM(:Server,:Vl,:CDate,:Size,:Used_per,:Used,:Available)"; $sth = $pdo->prepare($sql); //$sth->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8); $sth->bindParam(':Server', $Server, PDO::PARAM_STR); $sth->bindParam(':Vl', $Vl, PDO::PARAM_STR); $sth->bindParam(':CDate', $CDate, PDO::PARAM_STR); $sth->bindParam(':Size', $size, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12); $sth->bindParam(':Used_per', $used_per, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12); $sth->bindParam(':Used', $used, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12); $sth->bindParam(':Available', $available, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12); $sth->execute(); print "<td align='center'>".$size."</td>"; print "<td align='center'>".$used_per."</td>"; print "<td align='center'>".$used."</td>"; print "<td align='center'>".$available."</td>"; ?> Т.е. в первом варианте я не проставил длину выходного параметра и там было пусто на выходе. После простановки длинны стала выдаваться ошибка anslating string for input param 5 to UCS-2: No mapping for the Unicode character exists in the target multi-byte code page. Я порылся в нете нашел Код (PHP): $sth->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8); Пробовал и SYSTEM и UTF8 и DEFAULT. Не работает. Крокозябры на выходе. Попробую в хранимой процедуре переконвертировать Float в String. Ну или вообще отдельный запрос написать благо он совсем простой. Просто эта процедура во многих местах используется. Жалко если придется везде на запросы ее заменять.