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

Примечание: вы можете сделать это, используя 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)) { $_SESSION['myid'] = $row['id']; } 

Совершенно очевидно, что существует только один 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; 

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

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

 $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)