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) {
    $value = mysqli_fetch_field($result);
    $_SESSION['myid'] = $value;
}

Примечание: вы можете сделать это, используя метод 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 |
+----+

то есть. '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))
{
      $_SESSION['myid'] = $row['id'];
}

Ответ 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();

Правильный учебник PDO

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)