Здравствуйте. Не могу найти в чем ошибка. На IIS установлен PHP и MySQL, PHP работает, с MySQL соединение есть. Необходимо сделать выборку из базы. В результате запроса выпадает ошибка что не найдено ни одной записи, хотя данные есть и Sqlyog выборку делает. Самое странное что var_dump(); выдает значение принятых переменных, а в запрос к базе они почему то не вcтавляются. Думаю что проблема в разной кодировке символов в базе и в запросе. Такое может быть? PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); /* connection information */ $hostname = "localhost"; $user = "www"; $password = "pass"; $dbName = "web1"; $table = "web"; $UserName = $_POST['UserName']; $State = $_POST['State']; MYSQL_CONNECT($hostname, $user, $password) OR DIE( "Unable to connect to database"); @mysql_select_db("$dbName") or die( "Unable to select database"); $query = "SELECT * FROM $table WHERE UserName LIKE '%UserName%';"; var_dump($UserName); var_dump($State); $result = MYSQL_QUERY($query); if (!MYSQL_QUERY($query)) print ("<TR><TD align=center valign=top><font style=\"FONT-SIZE: 12px; FONT-FAMILY: Arial; color: #8a3920\"><b>! $result Произошла ошибка при создании запроса, проверьте правильность запроса.</b></font><p></TD></TR>"); /* Determine the number of records returned */ //print("<TR><TD align=center valign=top><font style=\"FONT-SIZE: 12px; FONT-FAMILY: Arial; color: #8a3920\"><b>Произошла ошибка при создании запроса, проверьте правильность запроса: $result </b></font><p></TD></TR>"); WHILE ($row=MYSQL_FETCH_ROW($result)) $number = "mysql_num_rows($result)"; if (!mysql_num_rows($result)) print("<TR><TD align=center valign=top><font style=\"FONT-SIZE: 12px; FONT-FAMILY: Arial; color: #8a3920\"><b>Данные неверны или поиск осуществляется не в той категории, повторите запрос</b></font><p></TD></TR>"); /* Print the relevant information */ ....... вывод результатов MYSQL_CLOSE()
вместо var_dump($UserName); var_dump($State); напиши лучше var_dump($query); и удивись)))) $number = "mysql_num_rows($result)"; - вообще что-то непонятное)
tommyangelo , var_dump($query); в браузере выдает следующее : То есть имя таблицы, имя пользователя подставляется, но запрос не выполняется, видимо где то ошибка в синтаксисе.
В целях отлова ошибок поставь после каждого вызова mysql_query проверку Код (Text): if(mysql_errno()<>0){ echo mysql_error(),"<br/>\n"; } Если ошибок с MySql нет, ищем далее. В строке 37 у тебя закавычена функция, будто она является строкой. Убрать. В запросах типа "SELECT * FROM $table WHERE UserName LIKE '%UserName%';" (кстати, точку с запятой в конце тоже убрать) не рекомендуются начинать критерий совпадения со знака %. Ну если таблица из двух юзеров, то можно оставить. Если их сотни-тысячи, то однозначно придумать что-то другое. Присвоение переменных таким образом, как у тебя в 12-13 строчках не надежное. $UserName = $_POST['UserName']; и $State = $_POST['State']; Сначала нужно указать дефолтное состояние переменной, потом удостовериться, что переданы параметры ('UserName' и 'State'), потом в целях безопасности нужно "проверить" эти переменные на предмет недопустимых символов, чтобы тебе не сделали инъекцию. Код (Text): $UserName=''; if(isset($_POST['UserName'])){ $UserName=функция_проверки_длины_строки_и_допустимости_символов($_POST['UserName']); } После mysql_connect сделай один запрос для указания кодировки, например: mysql_query("SET NAMES 'UTF8'"); (или другую кодировку, в которой у тебя документы и база данных) Если не поможет, напиши скрипт ещё раз уже поправленный, посмотрим.
А, самое прикольное, конечно, тут Код (Text): WHILE ($row=MYSQL_FETCH_ROW($result)) $number = "mysql_num_rows($result)"; Это не так делается. Если тебе нужно одно найденное значение, то Код (Text): $row=array(); if(mysql_num_rows($query)>0){ $row=mysql_fetch_row($result); } Если нужен список юзеров, у которых имя подходит по критерию поиска, то Код (Text): $userArray=array(); while($rArr=mysql_fetch_array($result)){ $userArray[]=$rArr; }