Php mysql выбрать одно значение

PHP и MySQL Выберите одно значение

Извините за такой основной вопрос, но я не нашел простой ответ нигде. Я хотел бы знать, как выбрать одно значение из моей таблицы mysql. Таблица включает в себя столбцы «имя пользователя» и «идентификатор» среди других («id» является автоматическим приращением, а «имя пользователя» уникально). Учитывая имя пользователя, я хочу установить переменную сеанса $_SESSION[‘myid’] равную значению в столбце ‘id’, который соответствует указанному имени пользователя. Вот код, который я уже пробовал:

session_start(); $name = $_GET["username"]; $sql = "SELECT 'id' FROM Users WHERE username='$name'"; $result = mysql_query($sql); $value = mysql_fetch_object($result); $_SESSION['myid'] = $value; 

До сих пор я получаю «Catchable fatal error: Object of class stdClass не может быть преобразован в строку». $value строки $value для ввода строки не устраняет проблему.

1) Не используйте цитату в имени поля или имени таблицы внутри запроса.

2) После извлечения объекта вам необходимо получить доступ к атрибутам / свойствам объекта (в вашем идентификаторе case) по имени атрибутов / свойств.

Он должен работать
Бонусные советы: используйте ограничение 1 для этого типа вопросов, чтобы сохранить время выполнения 🙂

session_start(); $name = $_GET["username"]; $sql = "SELECT id FROM Users WHERE username='$name' limit 1"; $result = mysql_query($sql); $value = mysql_fetch_object($result); $_SESSION['myid'] = $value->id; 

Одна нота: используйте mysqli_ * или PDO, поскольку mysql_ * устарел.

Вы делаете это с помощью метода mysqli_fetch_field .

session_start(); $link = mysqli_connect("localhost", "my_user", "my_password", "world"); $name = $_GET["username"]; $sql = "SELECT 'id' FROM Users WHERE username='$name' limit 1"; $result = mysqli_query($link, $sql); if ($result !== false)

Примечание: вы можете сделать это, используя mysql_fetch_field() , но он будет устаревшим в php v5.5

Читайте также:  Do synergy ru login index php

Функции mysql_ * устарели и небезопасны. Код в вашем вопросе уязвим для инъекционных атак . Настоятельно рекомендуется использовать расширение PDO, например:

session_start(); $query = "SELECT 'id' FROM Users WHERE username = :name LIMIT 1"; $statement = $PDO->prepare($query); $params = array( 'name' => $_GET["username"] ); $statement->execute($params); $user_data = $statement->fetch(); $_SESSION['myid'] = $user_data['id']; 

Где $PDO – ваша переменная объекта PDO. См. http://us2.php.net/pdo_mysql для получения дополнительной информации о PHP и PDO.

Дополнительная помощь:

Ниже приведен пример перехода к вашей базе данных с помощью PDO:

$database_username = "YOUR_USERNAME"; $database_password = "YOUR_PASSWORD"; $database_info = "mysql:host=localhost;dbname=YOUR_DATABASE_NAME"; try < $PDO = new PDO($database_info, $database_username, $database_password); >catch(PDOException $e) < // Handle error here > 

Когда вы используете mysql_fetch_object , вы получаете объект (класса stdClass) со всеми полями для строки внутри него.

Используйте mysql_fetch_field вместо mysql_fetch_object , который даст вам первое поле набора результатов ( id в вашем случае). Документы здесь

$value = mysql_result($result, 0); 
session_start(); $name = $_GET["username"]; $sql = "SELECT 'id' FROM Users WHERE username='$name' LIMIT 1 "; $result = mysql_query($sql) or die(mysql_error()); if($row = mysql_fetch_assoc($result))

Совершенно очевидно, что существует только один id соответствующий одному username потому что username уникально.

Но актуальная проблема заключается в самом запросе –

$sql = "SELECT 'id' FROM Users WHERE username='$name'"; 

O / P

т.е. ‘id’ самом деле рассматривается как строка не как атрибут id .

Исправить синтаксис:

$sql = "SELECT `id` FROM Users WHERE username='$name'"; 

т. е. использовать сильный акцент (`) вместо одиночной кавычки (‘).

$sql = "SELECT id FROM Users WHERE username='$name'"; 

Полный код

session_start(); $name = $_GET["username"]; $sql = "SELECT `id` FROM Users WHERE username='$name'"; $result = mysql_query($sql); $row=mysql_fetch_array($result) $value = $row[0]; $_SESSION['myid'] = $value; 

Это правильная старая версия.

Из документации правильно.

$sql2 = mysql_query("SELECT nombre FROM prov WHERE id_prov = '$array'"); $row2 = mysql_fetch_array($sql2); $nombre = $row2['nombre']; 
mysql_ (Old version) mysqli_ (New version) 

Источник

Кодовая польза

Полезные советы. Упрощаем виртуальную жизнь доступными средствами.

четверг, 15 июля 2010 г.

Единственное значение из mysql на php в 2 строки

Бывает нужно получить единственное значение из MySQL и огород из запроса и получения строки из результата, а потом использования значения полученного массива кажется явно лишним.

Т.е. стандартное (академическое) решение выглядит так:

 $sql = mysqli_query("SELECT COUNT(*) FROM `table` WHERE `col`='value';"); // получаем данные $row = mysqli_fetch_assoc($sql); // получаем строку в массив echo $row['COUNT(*)']; // используем значение массива // неудобная переменная, нужно одно значение, а используем массив // можно присвоить значение новой переменной $count = $row['COUNT(*)']; // либо переопределить массив в переменную $row = $row['COUNT(*)']; // но это либо дополнительная переменная, // либо не логичное название переменной, // либо с самого начала нужно было использовать правильное название. 


В принципе предлагаемый вариант немного удобнее для последующего использования:

 $sql = mysqli_query("SELECT COUNT(*) FROM `table` WHERE `col`='value';"); // получаем данные list($count) = mysqli_fetch_array($sql); // получаем строку в массив и // первое значение сразу присваиваем переменной echo $count; // используем переменную

Источник

PHP и MySQL Выберите одно значение

Я хотел бы знать, как выбрать одно значение из моей таблицы MySQL. Таблица включает в себя столбцы username и id среди других ( id — автоинкремент, а username — уникальный). Учитывая имя пользователя, я хочу установить переменную сеанса $_SESSION[‘myid’] равную значению в столбце id которое соответствует данному имени пользователя. Вот код, который я уже пробовал:

session_start(); $name = $_GET["username"]; $sql = "SELECT 'id' FROM Users WHERE username='$name'"; $result = mysql_query($sql); $value = mysql_fetch_object($result); $_SESSION['myid'] = $value; 

Исправляемая фатальная ошибка: объект класса stdClass не может быть преобразован в строку.

Приведение $value к типу string не решает проблему.

ОТВЕТЫ

Ответ 1

1) Не используйте цитату в имени поля или имени таблицы внутри запроса.

2) После извлечения объекта вам необходимо получить доступ к атрибутам/свойствам объекта (в вашем идентификаторе case) по имени атрибутов/свойств.

Он должен работать
Бонусные советы: используйте ограничение 1 для этого типа сценария, он сохранит время выполнения:)

session_start(); $name = $_GET["username"]; $sql = "SELECT id FROM Users WHERE username='$name' limit 1"; $result = mysql_query($sql); $value = mysql_fetch_object($result); $_SESSION['myid'] = $value->id; 

Одно примечание: используйте mysqli_ * или PDO, поскольку mysql_ * устарел.

Ответ 2

Функции mysql_ * устарели и небезопасны. Код в вашем вопросе уязвим для инъекционных атак. Настоятельно рекомендуется использовать вместо этого расширение PDO, например:

session_start(); $query = "SELECT 'id' FROM Users WHERE username = :name LIMIT 1"; $statement = $PDO->prepare($query); $params = array( 'name' => $_GET["username"] ); $statement->execute($params); $user_data = $statement->fetch(); $_SESSION['myid'] = $user_data['id']; 

Где $PDO — это ваша переменная объекта PDO. Смотрите https://www.php.net/pdo_mysql для получения дополнительной информации о PHP и PDO.

Для дополнительной помощи:

Вот краткий обзор того, как подключиться к вашей базе данных с помощью PDO:

$database_username = "YOUR_USERNAME"; $database_password = "YOUR_PASSWORD"; $database_info = "mysql:host=localhost;dbname=YOUR_DATABASE_NAME"; try < $PDO = new PDO($database_info, $database_username, $database_password); >catch(PDOException $e) < // Handle error here >

Ответ 3

Вы делаете это с помощью метода mysqli_fetch_field .

session_start(); $link = mysqli_connect("localhost", "my_user", "my_password", "world"); $name = $_GET["username"]; $sql = "SELECT 'id' FROM Users WHERE username='$name' limit 1"; $result = mysqli_query($link, $sql); if ($result !== false)

Примечание: вы можете сделать это, используя метод mysql_fetch_field() , но он будет устаревшим в php v5.5

Ответ 4

Когда вы используете mysql_fetch_object , вы получаете объект (класса stdClass) со всеми полями для строки внутри него.

Используйте mysql_fetch_field вместо mysql_fetch_object , который даст вам первое поле набора результатов ( id в вашем случае). Документы здесь

Ответ 5

$value = mysql_result($result, 0); 

Ответ 6

Совершенно очевидно, что существует только один id , соответствующий одному username , потому что username является уникальным.

Но актуальная проблема заключается в самом запросе —

$sql = "SELECT 'id' FROM Users WHERE username='$name'"; 

O/P

то есть. ‘id’ фактически рассматривается как строка не как атрибут id .

Исправить синтаксис:

$sql = "SELECT `id` FROM Users WHERE username='$name'"; 

то есть. используйте серьезный акцент (`) вместо одиночной кавычки (‘).

$sql = "SELECT id FROM Users WHERE username='$name'"; 

Полный код

session_start(); $name = $_GET["username"]; $sql = "SELECT `id` FROM Users WHERE username='$name'"; $result = mysql_query($sql); $row=mysql_fetch_array($result) $value = $row[0]; $_SESSION['myid'] = $value; 

Ответ 7

session_start(); $name = $_GET["username"]; $sql = "SELECT 'id' FROM Users WHERE username='$name' LIMIT 1 "; $result = mysql_query($sql) or die(mysql_error()); if($row = mysql_fetch_assoc($result))

Ответ 8

mysql_* устарело в 2013 году и полностью удалено из PHP в 2018. У вас есть две альтернативы: PDO или MySQLi.

PDO

Более простой вариант — PDO, который имеет fetchColumn() вспомогательную функцию fetchColumn() :

$stmt = $pdo->prepare("SELECT id FROM Users WHERE username=?"); $stmt->execute([ $_GET["username"] ]); $value = $stmt->fetchColumn(); 

MySQLi

Вы можете сделать то же самое с MySQLi, но это сложнее:

$sql = "SELECT id FROM Users WHERE username=?"; $stmt = $mysqliConn->prepare($sql); $stmt->bind_param("s", $_GET["username"]); $stmt->execute(); $data = $stmt->get_result()->fetch_row(); $value = $data['id'] ?? null; 

Ответ 9

Это правильная старая версия.

Из правильной документации.

$sql2 = mysql_query("SELECT nombre FROM prov WHERE id_prov = '$array'"); $row2 = mysql_fetch_array($sql2); $nombre = $row2['nombre']; 
mysql_ (Old version) mysqli_ (New version) 

Источник

Оцените статью