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)
您可以使用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中它将被弃用
| 归档时间: |
|
| 查看次数: |
192316 次 |
| 最近记录: |