PHP和MySQL选择单个值

时间:2014-01-02 07:12:36

标签: php mysql sql database user-accounts

对不起这个基本问题,但我在任何地方都找不到简单的答案。我想知道如何从我的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转换为类型字符串不能解决问题。

9 个答案:

答案 0 :(得分:51)

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;

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

答案 1 :(得分:10)

mysql_ *函数已弃用且不安全。 您的问题中的代码容易受到injection attacks的攻击。<​​/ em> 高度建议您使用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对象变量。有关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
}

答案 2 :(得分: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;
}

注意:您也可以使用mysql_fetch_field()方法执行此操作,但不会在php v5.5中弃用

答案 3 :(得分:3)

使用mysql_fetch_object时,会得到一个对象(类stdClass),其中包含该行的所有字段。

使用mysql_fetch_field代替mysql_fetch_object,这将为您提供结果集的第一个字段(在您的情况下为id)。文档为here

答案 4 :(得分:3)

试试这个

$value = mysql_result($result, 0);

答案 5 :(得分:2)

很明显,只有一个id对应一个username,因为username是唯一的。

但实际问题在于查询本身 -

$sql = "SELECT 'id' FROM Users WHERE username='$name'";

O / P

+----+
| id |
+----+
| id |
+----+

即。 'id'实际上被视为字符串而不是id属性。

正确的synatx:

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

答案 6 :(得分:1)

试试这个

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'];
}

答案 7 :(得分:0)

mysql_*扩展名已于2013年弃用,并于2018年从PHP中完全删除。您有两个选择PDOMySQLi

PDO

更简单的选项是PDO,它具有简洁的辅助功能fetchColumn()

$stmt = $pdo->prepare("SELECT id FROM Users WHERE username=?");
$stmt->execute([ $_GET["username"] ]);
$value = $stmt->fetchColumn();

Proper PDO tutorial

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;

答案 8 :(得分:-1)

这是一个正确的旧版本。

来自文档正确。

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