PHP 和 MySQL 选择单个值

2022-08-30 16:50:37

我想知道如何从我的MySQL表中选择单个值。该表包括列和其他列(自动递增且唯一)。给定用户名,我想设置一个会话变量,该变量等于与给定用户名对应的列中的值。以下是我已经尝试过的代码:usernameididusername$_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


答案 1
  1. 不要在查询中的字段名称或表名称中使用引号。

  2. 获取对象后,您需要按属性/属性名称访问对象特性/属性(在本例中为 id)。

一个注意:请使用mysqli_*或PDO,因为mysql_*已弃用。这里它使用mysqli:

session_start();
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = new mysqli('localhost', 'username', 'password', 'db_name');
$link->set_charset('utf8mb4'); // always set the charset
$name = $_GET["username"];
$stmt = $link->prepare("SELECT id FROM Users WHERE username=? limit 1");
$stmt->bind_param('s', $name);
$stmt->execute();
$result = $stmt->get_result();
$value = $result->fetch_object();
$_SESSION['myid'] = $value->id;

额外提示:对于此类场景使用限制1,它将节省执行时间:)


答案 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 对象变量的位置。有关 PHP 和 PDO 的更多信息,请参阅 https://www.php.net/pdo_mysql$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
}

推荐