- PHP и MySQL Выберите одно значение
- Дополнительная помощь:
- O / P
- Исправить синтаксис:
- Полный код
- Кодовая польза
- четверг, 15 июля 2010 г.
- Единственное значение из mysql на php в 2 строки
- PHP и MySQL Выберите одно значение
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Для дополнительной помощи:
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- O/P
- Исправить синтаксис:
- Полный код
- Ответ 7
- Ответ 8
- PDO
- MySQLi
- Ответ 9
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
Функции 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)