PHP和MySQL选择单个值

use*_*501 20 php mysql sql database user-accounts

对不起这个基本问题,但我没有在任何地方找到一个简单的答案.我想知道如何从我的mysql表中选择一个值.该表包括列'username'和'id'等('id'是自动递增,'username'是唯一的).给定用户名,我想设置一个会话变量username,该变量等于'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;
Run Code Online (Sandbox Code Playgroud)

到目前为止,我得到"可捕获的致命错误:类stdClass的对象无法转换为字符串." 转换id为类型字符串不能解决问题.

Awl*_*ton 54

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

2)获取对象后,您需要通过属性/属性名称访问对象属性/属性(在您的案例中为id).

它应该工作
奖金提示:对于这种类型的场景使用限制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;
Run Code Online (Sandbox Code Playgroud)

一个注意事项:因为mysql_*已弃用,请使用mysqli_*或PDO.


Wes*_*ick 11

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'];
Run Code Online (Sandbox Code Playgroud)

$PDO您的PDO对象变量在哪里.有关PHP和PDO的更多信息,请参见http://us2.php.net/pdo_mysql.

如需额外帮助:

以下是如何使用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
}
Run Code Online (Sandbox Code Playgroud)


sas*_*sas 9

您可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

注意:你也可以通过使用mysql_fetch_field()方法来实现,但是在php v5.5中它将被弃用

  • @ToolmakerSteve mysqli_fetch_field不返回值.它返回字段定义,如名称,表格,标志.-1因为这个... http://php.net/manual/en/mysqli-result.fetch-field.php (3认同)
  • " mysqli_fetch_field "返回一个包含字段定义信息的对象,如果没有可用的字段信息,则返回 FALSE。所以这不会像答案所建议的那样工作。-1 因为这个。 (2认同)
  • **警告:** 这个答案是完全错误的。`mysqli_fetch_field()` 返回有关表列的元数据,而不是值本身。 (2认同)