Здравствуйте.Решил себя озадачить и озадачил так,что не могу понять,как коннектить php7 к mssql Не хочу кидать много кода сюда.Впервые вообще воспользовался форумом...Ибо весь гугл объюзал и такое себе... Ссылка на архив: https://yadi.sk/d/YaHXIOIj3VLK9H Раскомментил php.ini Залил дрова php 7.2 в ext (в phpinfo вывелся sqlsrv) http://prntscr.com/jdp46t -mssql В чем проблема? Нужно сделать регистрацию,а точнее помочь с ней.Не могу приконнектится к бд ,когда ввожу в формы данные.То есть отправка на сервер не идет Имеется BillingDB и от нее TBL_Member_Data -именно в TBL должны появится данные после того,как я ввел данные на сайте Надеюсь суть ясна.Помогите пожалуйста,заранее спасибо! Уже сил нет.И кажется ошибка банальная,но вот с php 7 я не работал и буквально потратил в общей сумме 30 часов на построение этой "Шляпы" ,а вот что теперь с ней делать дальше и как решить проблему...Увы,не знаю
Для этого надо было залить все на GitHub и скинуть сюда. Никому не интересно будет скачивать файл, дабы понять смысл. PHP 7 отличается лишь удалением некоторых старых функций и добавлением новых. Есть вероятность, что подключение к бд с внешних источников запрещена.
Вроде всё работает.Сейчас выдает ошибку При отправке данных регистрации --- Добавлено --- connect.php PHP: <?php $serverName = "WIN-344VU98D3RU\TOMB"; //serverName\instanceName $connectionInfo = array( "Database"=>"BillingDB", "UID"=>"sa", "PWD"=>"fghtvfghtv"); $conn = sqlsrv_connect( $serverName, $connectionInfo); if (!$conn) { echo( "<P> В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно. </P>" ); exit(); } ?> reg.php PHP: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <?php include_once("connect.php"); if (isset($_POST['submit'])) { if(empty($_POST['AccountID'])) { echo 'Вы не ввели логин'; } elseif(empty($_POST['passwd'])) { echo 'Вы не ввели пароль'; } elseif(empty($_POST['passwd2'])) { echo 'Вы не ввели подтверждение пароля'; } elseif($_POST['passwd'] != $_POST['passwd2']) { echo 'Введенные пароли не совпадают'; } elseif(empty($_POST['email'])) { echo 'Вы не ввели E-mail'; } else { $AccountID = $_POST['AccountID']; $passwd = $_POST['passwd']; $passwd2 = $_POST['passwd2']; $email = $_POST['email']; $query = "SELECT * `serial_number` FROM `TBL_Member_Data` WHERE `AccountID`='{$AccountID}' AND `passwd`='{$passwd}' "; $parameters = [$_POST["AccountID"], $_POST["passwd"]]; $sql = sqlsrv_query( $conn, $query ,$parameters) or die(print_r( sqlsrv_errors(), true)); if (sqlsrv_num_rows($sql) > 0) { echo 'Такой логин уже существует'; } else { $AccountID=sqlsrv_real_escape_string($AccountID); $passwd=sqlsrv_real_escape_string($passwd); $email=sqlsrv_real_escape_string($email); $query = "INSERT INTO TBL_Member_Data(AccountID , passwd , email ) VALUES ('$AccountID', '$passwd', '$email')"; $result = sqlsrv_query($query) or die(sqlsrv_error());; echo 'Спасибо за регистрацию!'; } } } ?> --- Добавлено --- И т.к увидел array этот...Побежал скачивать драйвер x64.Перезапустил всё и перезагрузился.Ничего не дало по сути Сложно,сложно...
Кодировка хромает, текст ошибки не видно, но судя по коду (42000) - синтаксическая ошибка в запросе. --- Добавлено --- Я с MS SQL слабо знаком, но там точно можно использовать гравис (обратные кавычки) для оборачивания названий полей и таблиц?
Вообще ничего не понимаю...Вроде бы схожа с mysql,но такой гемор...Нет ни у кого исходников с коннектами к бд? Выходят новые ошибки.Не находят индексы...Подключаюсь к BillingDB и от этой бд мне нужно в TBL_Member_Data обрабатывать данные при авторизации\регистрации Вообще не выходит никак.Писал уже через select,from...Тоже самое В php есть sqlsrv и работает. Все тестовые скрипты в ставлял на выявление подключения -работают Пришлось даже в TBL_Member_Data добавить ID и сделать его ключем...Все равно бред полный. Пойду повешусь...
PHP: $serverName = "MSSQLSERVER,1433"; //serverName\instanceName $connectionInfo = array( "Database"=>"Database", "CharacterSet" =>"UTF-8", "UID"=>"логин", "PWD"=>"пароль"); $conn = sqlsrv_connect( $serverName, $connectionInfo ); Все работает таким образом.
Добавлять порт в 2018 году -только для ODBC Подключение работает и без порта.Добавил лишь чарсет и то смысла не вижу от него --- Добавлено --- Коннект есть и это видно.Пробовал даже значения убирать с пароля или логина и выдавал ошибку-уже говорит о том,что подключение существует Теперь мне нужна регистрация и ничего путевого не могу найти.Точнее такого нет.есть лишь на ASP.NET,но я не собираюсь такое использовать...C# я не учу и надеюсь он мне пока не понадобится.Есть идея подключить через node.js,но это такое...Опять же опыта в этом нет,но js сам по себе нужен...Front-end\dev без этого никак... --- Добавлено --- PHP: <?php include_once("connect.php"); if (isset($_POST['submit'])) { if(empty($_POST['AccountID'])) { echo 'Вы не ввели логин'; } elseif(empty($_POST['passwd'])) { echo 'Вы не ввели пароль'; } elseif(empty($_POST['passwd2'])) { echo 'Вы не ввели подтверждение пароля'; } elseif($_POST['passwd'] != $_POST['passwd2']) { echo 'Введенные пароли не совпадают'; } elseif(empty($_POST['email'])) { echo 'Вы не ввели E-mail'; } else { $AccountID = $_POST['AccountID']; $passwd = $_POST['passwd']; $passwd2 = $_POST['passwd2']; $email = $_POST['email']; $query = "SELECT `serial_number` FROM `TBL_Member_Data` WHERE `AccountID`='{$AccountID}' AND `passwd`='{$passwd}' "; $sql = sqlsrv_query($query,$conn) or die(sqlsrv_error()); if (sqlsrv_num_rows($sql) > 0) { echo 'Такой логин уже существует'; } else { $AccountID=sqlsrv_real_escape_string($AccountID); $passwd=sqlsrv_real_escape_string($passwd); $email=sqlsrv_real_escape_string($email); $query = "INSERT INTO TBL_Member_Data(AccountID , passwd , email ) VALUES ('$AccountID', '$passwd', '$email')"; $result = sqlsrv_query($query) or die(sqlsrv_error());; echo 'Спасибо за регистрацию!'; } } } ?> Актуальный ли скрипт обработчика для mssql (sqlsrv) Проблема в этом...
PHP: <?php if (isset($_POST['AccountID'])) { $AccountID = $_POST['AccountID']; if ($AccountID == '') { unset($AccountID);} } //заносим введенный пользователем логин в переменную $AccountID, если он пустой, то уничтожаем переменную if (isset($_POST['passwd'])) { $passwd=$_POST['passwd']; if ($passwd =='') { unset($passwd);} } //заносим введенный пользователем пароль в переменную $passwd, если он пустой, то уничтожаем переменную if (empty($AccountID) or empty($passwd)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт { exit ("Вы ввели не всю информацию, венитесь назад и заполните все поля!"); } //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести $AccountID = stripslashes($AccountID); $AccountID = htmlspecialchars($AccountID); $passwd = stripslashes($passwd); $passwd = htmlspecialchars($passwd); //удаляем лишние пробелы $AccountID = trim($AccountID); $passwd = trim($passwd); // подключаемся к базе include ("connect.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь // проверка на существование пользователя с таким же логином $result = sqlsrv_query("SELECT serial_number FROM TBL_Member_Data WHERE AccountID='$AccountID'",$conn); $myrow = sqlsrv_fetch_array($result); if (!empty($myrow['serial_number'])) { exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин."); } // если такого нет, то сохраняем данные $result2 = sqlsrv_query ("INSERT INTO TBL_Member_Data (AccountID,passwd) VALUES('$AccountID','$passwd')"); // Проверяем, есть ли ошибки if ($result2=='TRUE') { echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='index.php'>Главная страница</a>"; } else { echo "Ошибка! Вы не зарегистрированы."; } ?> Взял фулл исходники с некого сайта и тут настроил исходник опять под базу данных.Не работает,вылезает эхо с ошибкой...Что за издец...
Вы хотя бы данные то с таблицы можете вытянуть? Вытяните данные, если получится, дальше с ними работайте. Типо так: PHP: $serverName = "MSSQLSERVER,1433"; //serverName\instanceName $connectionInfo = array( "Database"=>"Database", "CharacterSet" =>"UTF-8", "UID"=>"логин", "PWD"=>"пароль"); $conn = sqlsrv_connect( $serverName, $connectionInfo ); function getAccountID($conn, $name) { $sql = "SELECT * FROM [BilingDB].[dbo].[TBL_Member_Data]"; $stmt = sqlsrv_query( $conn, $sql ); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); } $array = ""; while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) { $array = $row['AccountID']; } return $array; }
Скорее всего это мне и нужно было.В myslq такое не нужно прописывать.Максимум коннект,а остальное уже в операторах Впервые с таким сталкиваюсь.Спасибо,сейчас попробую!
Это просто для того чтобы проверить вы цепляетесь к таблице или нет. Коннект коннектом, а таблицу то программка видит или нет.
Вот как раз-таки и не видит... --- Добавлено --- Немного переделал вашу функцию и в итоге получил данные из бд --- Добавлено --- Получается так,что работает...И вот регистрацию бы сделать...
reg PHP: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <? include_once("connect.php"); if (isset($_POST['submit'])) { if(empty($_POST['AccountID'])) { echo 'Вы не ввели логин'; } elseif(empty($_POST['passwd'])) { echo 'Вы не ввели пароль'; } elseif(empty($_POST['passwd2'])) { echo 'Вы не ввели подтверждение пароля'; } elseif($_POST['passwd'] != $_POST['passwd2']) { echo 'Введенные пароли не совпадают'; } elseif(empty($_POST['email'])) { echo 'Вы не ввели E-mail'; } else { $AccountID = $_POST['AccountID']; $passwd = $_POST['passwd']; $passwd2 = $_POST['passwd2']; $email = $_POST['email']; $query = "SELECT serial_number FROM [BillingDB].[dbo].[TBL_Member_Data] WHERE AccountID='{$AccountID}' AND passwd='{$passwd}' "; $sql = sqlsrv_query($conn,$query) or die(sqlsrv_error()); if (sqlsrv_num_rows($sql) > 0) { echo 'Такой логин уже существует'; } else { $AccountID=sqlsrv real_escape_string($AccountID); $passwd=sqlsrv real_escape_string($passwd); $email=sqlsrv real_escape_string($email); $query = "INSERT INTO [BillingDB].[dbo].[TBL_Member_Data] (AccountID , passwd , email ) VALUES ('$AccountID', '$passwd', '$email')"; $result = sqlsrv_query($query) or die(sqlsrv_error()); echo 'Спасибо за регистрацию!'; } } } ?> На данный момент ошибка выходит "$AccountID=sqlsrv real_escape_string($AccountID);" Я убрал нижний слеш между sqlsrv и real,ибо где-то в fullstack owerflow писали об этом.Вообще понять не могу функции sqlsrv Хотя бы пример один иметь с тем,как оно работает...Чтобы в дальнейшем хотя бы проблем не было.Ужас какой-то
https://php.ru/manual/book.sqlsrv.html без слеша sqlsrv тут нет, может в этом причина, поищите замену: sqlsrv real_escape_string
Дело в том,что он не понимает функцию sqlsrv_real_escape_string.Это для sql&sqli Нужно заменить "sqlsrv_real_escape_string" на подобную функцию,но с тем же параметром Пока не знаю как это решить.Больше проблем нет и надеюсь это реально последняя функция с ошибкой... UPD: имеенно mssql не понимает функцию* Также была ошибка на 36-ой линии и писал о двух функциях.В скобках был лишь $query и решил эту проблему прибавив $conn В скрипте авторизации такая же проблема с sqlsrv
Также после коннекта проверил через php код запись в бд и всё чудесно работает,а значит осталось по-моему мнению заменить лишь функции