php - 使用变量从 mysql 数据库获取数据

标签 php mysql string variables protected

我正在尝试使用一个对象从 mysql 数据库中获取数据,该对象实际上是一个变量:

try {
$mysqlcon = new PDO($dbserver, $db['user'], $db['pass'], $dboptions);
// Selecting database "user" to get data about a specific client
if(($user_data = $mysqlcon->query("SELECT * FROM $dbname.user;")->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC)) === false)
{
    echo '$#!+ happens, Critical DataBase Error!';// error on db select
}

echo 'Country: '.$user_data[$clientuid]['nation']; // This is not working, it gives nothing
echo 'Country: '.$user_data['OISnyJzyjA63XkPB6xla8hjms3M=']['nation']; // BUT This works perfectly               
// DEBUGGING
echo $clientuid; // it outputs: OISnyJzyjA63XkPB6xla8hjms3M=
var_dump($clientuid); // and this is the important thing, it outputs this: object(TeamSpeak3_Helper_String)#27 (2) { ["string":protected]=> string(28) "OISnyJzyjA63XkPB6xla8hjms3M=" ["position":protected]=> int(0) }
}
catch (PDOException $e)
{
    echo "Database Connection failed: ".$e->getMessage()."\n";
    exit;
}

echo $clientuid; 输出:OISnyJzyjA63XkPB6xla8hjms3M=

这不起作用,它什么也没给出:

echo 'Country: '.$user_data[$clientuid]['nation'];

这非常有效:

echo 'Country: '.$user_data['OISnyJzyjA63XkPB6xla8hjms3M=']['nation'];                

var_dump($clientuid); 产生这个:

object(TeamSpeak3_Helper_String)#27 (2) {
    ["string":protected]=> string(28) "OISnyJzyjA63XkPB6xla8hjms3M=" 
    ["position":protected]=> int(0)
}

最佳答案

$user_data 是一个对象并且有一个 protected 字符串属性和一个神奇的 __tostring() 方法,当对象作为字符串访问(如 echo)。如果没有 __tostring() 方法,您将得到:

Recoverable fatal error: Object of class TeamSpeak3_Helper_String could not be converted to string

如果字符串属性是 public 那么你可以直接访问它:

echo 'Country: '.$user_data[$clientuid->string]['nation'];

但是它是protected 并且不可访问,你会得到:

Fatal error: Uncaught Error: Cannot access protected property TeamSpeak3_Helper_String::$string

当用作数组索引时,它不会强制使用字符串,因此要强制它触发 __tostring() 魔术方法,转换为 (string) 将起作用(虽然可能有几种方法可以做到这一点):

echo 'Country: '.$user_data[(string)$clientuid]['nation'];

或使用引号:

echo 'Country: '.$user_data["$clientuid"]['nation'];

关于php - 使用变量从 mysql 数据库获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49056554/

相关文章:

Python "ValueError: incomplete format"打印 ("stuff %"% "thingy")

php - 联系表单中的 From 字段和 mail() 函数存在问题

php - 当数据以 html 格式存储在 mysql 中时,如何在 php 中使用子字符串?

mysql - mysql 5.0 是否索引空值?

创建一个动态分配的链表

.net - 任何 .NET Parse 方法都可以处理前缀为 "0x"的十六进制字符串吗?

php - mysql 2 SELECT 在一个查询中

php - 如何在此循环中选择所有其他结果? [PHP]

javascript - 如何隐藏/显示从 PHP 生成代码的 HTML 元素的可见性?

MySQL 错误 1005 (HY000) : Can't create table