0

Я пытаюсь вывести значение одного поля, одной строки(потому что login уникальный), но в result возвращается что-то не то, не понимаю почему, возможно я что-то не так делаю?

<?php
require "conn.php";
$user_login = $_POST["user_login"];
$mysql_qry = "select user_rank * from user where user_login like '$user_login'";
$result = mysqli_query($conn,$mysql_qry);
echo $result;
?>
LoL
  • 33

1 Answers1

1
$user_login = $_POST["user_login"];    

$conn = new mysqli("localhost", "my_user", "my_password", "world");
$stmt = $conn->prepare("select user_rank, * from user where user_login like ?");
$stmt->bind_param('s', $user_login);
$stmt->execute();
$result = $stmt->get_result();
$assoc = $result->fetch_assoc();

процедурно:

$user_login = $_POST["user_login"];

$link = mysqli_connect("localhost", "my_user", "my_password", "world"); $stmt = mysqli_prepare($link, "select user_rank, * from user where user_login like ?"); mysqli_stmt_bind_param($stmt, 's', $user_login); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $assoc = mysqli_fetch_assoc($result);

Соответствующие доки:

  • А можете объяснить что происходит здесь mysqli_stmt_bind_param($stmt, "s", $user_login);? Возвращает true если..? или false при ошибке. И mysqli_fetch_assoc возвращает массив, но вроде как результатом должна быть одна ячейка из таблицы, не совсем понимаю как это работает. – LoL May 09 '21 at 21:19
  • Просто пытаюсь воспользоваться вашим ответом, а выводит ошибку Parse error: syntax error, unexpected 's' (T_STRING) in ... – LoL May 09 '21 at 21:23
  • А теперь Warning: mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, bool given in ... – LoL May 09 '21 at 21:32
  • @LoL ты ообще доки когда-нибудь открывал? https://www.php.net/manual/ru/mysqli-stmt.bind-param.php – Jean-Claude May 10 '21 at 07:28
  • @Jean-Claude, ну я читаю пытаюсь понять, потому что по сути работаю с этим впервые, поэтому спрашиваю вопросы которые я не совсем понимаю, я понимаю что в ответе $stmt должен быть mysqli_stmt, но я не понимаю, как тогда ответ мне может помочь и не запутать меня, а если я им неправильно пользуюсь, то хотелось бы понять что не так – LoL May 10 '21 at 07:56
  • @LoL " результатом должна быть одна ячейка из таблицы," - у вас в запросе было написано user_rank, * а это не одна ячейка. В любом случае взятие ассоциативного массива - самое оно, потому что позволит обратиться так: $assoc['user_rank'].......mysqli_stmt_bind_param привязывает переменные к запросу. s - означает что переменная строковая (см. доки по bind param). Привязывать к запросу нужно так, потому что это защищает от SQL инъекций........."mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, bool given" --- значит у вас запрос возвращает false - то есть неверный запрос – Алексей Шиманский May 10 '21 at 08:08
  • @LoL "syntax error, unexpected 's'" --- вроде не должно быть.. ошибка синтаксиса – Алексей Шиманский May 10 '21 at 08:09
  • @АлексейШиманский, как я понимаю просто надо написать mysqli_stmt_bind_param($stmt, 's', $user_login);, а неверный запрос он может быть по какой причине, например я запрашиваю значения которых в таблице нет? или что-то еще, просто именно в самом запросе я не сомневаюсь и не могу понять причину ошибки – LoL May 10 '21 at 08:24
  • @LoL " как я понимаю просто надо написать mysqli_stmt_bind_param($stmt, 's', $user_login);, " ---- а в чём отличие?)) в одинарной кавычке? по идее разницы не должно быть. ..........."неверный запрос он может быть по какой причине, " - их десятки......... попробуйте включить отображение ошибок и по этому поводу воспользоваться ответом отсюда: https://ru.stackoverflow.com/a/423446/191482 – Алексей Шиманский May 10 '21 at 08:29
  • @АлексейШиманский ну как показали сообщения об ошибках, с одинарными кавычками он перестал ругаться на синтаксис – LoL May 10 '21 at 08:32
  • @LoL попробуйте две вещи: 1) убедиться что логин пароль и БД в подключении указанны верно 2) исполнить запрос без подготовленных переменных, хотя бы банально SELECT * FROM user where user_login ='test' (вместо test свой логин) и проверить на нём....и уже от этого идти к бОльшему – Алексей Шиманский May 10 '21 at 08:32
  • @АлексейШиманский оказывается * может все поломать "SELECT user_rank FROM user WHERE user_login like ?" – LoL May 10 '21 at 09:38
  • @LoL забавно. видимо mysql не может понять что звёздочка относится к определённой таблице... а вот SELECT user_rank, user.* FROM user...... работает нормально.... странно.. А в Postgresql работает такой запрос штатно)) Хорошо. что разобрались – Алексей Шиманский May 10 '21 at 10:15