#php #mysql
#php #mysql
Вопрос:
У меня есть код, который хорошо работает, если я указываю в своем запросе нужный идентификатор. Однако при попытке проанализировать его через URL он не работает.
if(!$rs = mysql_query("SELECT id_player, fight, sh, pl, st, ch, ma, hi, sk, en, pe, fa, le, str, team, contract_lenght, main_position, alternate_position, salary, player_name, TRUNCATE(((sh pl st)/3),0) AS OFF, TRUNCATE(((ch ma hi)/3),0) as DEF, TRUNCATE(((sh pl st ch ma hi sk en pe fa le str pot con greed)/15),0) as OV, main_position.id, main_position.type_main_position, alternate_position.id, alternate_position.type_alternate_position, nom_equipe_nhl.team_id, nom_equipe_nhl.team_name, nom_equipe_nhl.team_abr FROM players_nhl INNER JOIN nom_equipe_nhl ON nom_equipe_nhl.team_id = players_nhl.team INNER JOIN main_position ON players_nhl.main_position = main_position.id INNER JOIN alternate_position ON players_nhl.alternate_position = alternate_position.id WHERE id_player='$id_player'")) {
Я также получил это в верхней части своей страницы..
<?php
$id_player = mysql_real_escape_string($_GET['id_player']);
?>
Если я заменю $id_player на число, это сработает, но если я проанализирую свой URL с помощью ?id_player=25 .. Я всегда получал результат not found.
Я много чего перепробовал, но, похоже, это не работает. Однако, если я заменю все внутреннее соединение и все после «как OV» и от игроков… это работает. Ie;
if(!$rs = mysql_query("SELECT id_player, fight, sh, pl, st, ch, ma, hi, sk, en, pe, fa, le, str, team, contract_lenght, main_position, alternate_position, salary, player_name, TRUNCATE(((sh pl st)/3),0) AS OFF, TRUNCATE(((ch ma hi)/3),0) as DEF, TRUNCATE(((sh pl st ch ma hi sk en pe fa le str pot con greed)/15),0) as OV FROM players_nhl WHERE id_player='$id_player'")) {
Мне действительно нужно, чтобы идентификатор анализировался через URL с внутренним соединением.
Спасибо
Комментарии:
1. Вы уверены в
mysql_*
функциях? Они были удалены из PHP. Вам обязательно следует переключиться на mysqli или PDO.2. Весь мой код старый, в будущем я, вероятно, перешел бы на mysqli или pdo, но я бы действительно хотел, чтобы эта работа была такой, как сейчас, если это возможно.
3. Если он останавливается на 25, вы уверены, что у вас ID = 25?
4. Также
contract_lenght
похоже на опечатку.5. тэдман, да, я получил более 3000 строк, и это сработает, если я добавлю 25 непосредственно в свой запрос. Что касается contract_length, я согласен, что это может выглядеть как опечатка, но эта ошибка была допущена человеком, который создал таблицу и неправильно ее написал 😉
Ответ №1:
mysql_real_escape_string()
Это расширение устарело в PHP 5.5.0, и оно было удалено в PHP 7.0.0
вы должны использовать mysqli или pdo.
Это правильный синтаксис:
$id_player = mysqli_real_escape_string($your_connection_object, $_GET['id_player']);
или в нотации ООП:
$your_connection_object->real_escape_string();
То же самое, что описано для mysql_query() …
mysql_query("SELECT id_player,...
становится
mysqli_query($your_connection_object, $your_query);
или в ООП:
$your_connection_object->query($your_query);
Комментарии:
1. Форма ООП — единственная, которую действительно стоит учить. Он гораздо менее подробный, и его практически невозможно использовать
mysql_query
случайно, например, забытьi
при вызове функции.