对不起这个基本问题,但我在任何地方都找不到简单的答案。我想知道如何从我的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
转换为类型字符串不能解决问题。
答案 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'";
+----+
| 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;
答案 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中完全删除。您有两个选择PDO或MySQLi。
更简单的选项是PDO,它具有简洁的辅助功能fetchColumn()
:
$stmt = $pdo->prepare("SELECT id FROM Users WHERE username=?");
$stmt->execute([ $_GET["username"] ]);
$value = $stmt->fetchColumn();
您可以对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)