PHP bin2hex 与 mysql

标签 php mysql database

我正在为 PHP 中的 Web 服务创建一个授权 channel 。在前两行中,我创建了一个随机的 18 字节十六进制数字,我在数据库中针对用户设置了该数字,并将相同的 auth_token 发送给另一端的用户。但是,当用户发送相同的 auth_token 来获取某些数据时,脚本无法搜索数据库。在数据库中查询的十六进制代码存在一些问题。请帮忙。

$hex = bin2hex(openssl_random_pseudo_bytes('18'));
$database->executeObject('UPDATE tbluser SET user_auth_token="'.$hex.'" WHERE user_name="'.$_POST['uid'].'"');
...
...
...
}elseif ( $_POST['query'] = "fetch" && !empty($_POST['auth_token']) ){
$token = $_POST['auth_token'];
$uid = $database->executeObject('SELECT user_id AS id FROM tbluser WHERE user_auth_token="'.$token.'"');
if (!empty($uid)){
    $fname = $database->executeObject('SELECT writer_first_name as fname FROM tblwriter WHERE user_id="'.$uid.'"')->fname;
    echo $fname;
    exit;
}else{ echo "Not Authorized"; exit; }

最佳答案

我猜测您的executeObject()函数,但看起来您使用它的方式不一致。

第一次调用它时,您希望它返回标量 user_id。

$uid = $database->executeObject('SELECT user_id AS id FROM tbluser 
    WHERE user_auth_token="'.$token.'"');

$uid 现在是否包含一个结果集对象,或者一行上的用户 ID 的单个值?我建议 $uid 包含一个结果集。

但是第二次调用executeObject()时,您希望它返回一个对象,并且您需要引用特定字段fname来获取该列的值。

if (!empty($uid)){
    $fname = $database->executeObject('SELECT writer_first_name as fname 
        FROM tblwriter WHERE user_id="'.$uid.'"')->fname;
    echo $fname;
    exit;

看来您需要使用 ->fname 来获取单个列的值。那么为什么在第一个查询中使用 ->user_id 呢?

我建议对您的身份验证 token 的搜索实际上成功,但随后您通过插入第一个查询中的整个结果集对象来搜索fname ,而不是单个列的值。因此第二个查询搜索不正确。

除非您的查询结果对象内置了一个非常智能的__toString()方法。

关于PHP bin2hex 与 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251961/

相关文章:

php - 按数组中的指定列对行进行分组

php - 将 CodeIgniter 错误的表单写入数据库时​​出错

php - 在多个表上更新

以更有效的方式使用 SELECT IN SELECT 进行 mysql 查询

mysql - 删除sql中的特定表

php - 连接 MySQL 时遇到问题

php - SQL 外键用法?它到底有什么作用?什么时候需要?

database - 需要 MS Access Relationship 帮助

database - 在 C++ 中以编程方式验证数据库结构

php - 如何找到包含在数组中的值中的值?