Извините за такой основной вопрос, но я не нашел простой ответ нигде. Я хотел бы знать, как выбрать одно значение из моей таблицы 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'";
+----+ | 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)