[英]Get data from mysql db using a variable
我正在尝试使用实际上是变量的对象从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()
方法,您将得到:
可恢复的致命错误:TeamSpeak3_Helper_String类的对象无法转换为字符串
如果string属性是public
则可以访问它:
echo 'Country: '.$user_data[$clientuid->string]['nation'];
但是它protected
且不可访问,您将获得:
致命错误:未捕获的错误:无法访问受保护的属性TeamSpeak3_Helper_String :: $$ string
当用作数组索引时,它不会强制使用字符串,因此可以强制它触发__tostring()
魔术方法,将其__tostring()
为(string)
(尽管可能有几种方法可以使用):
echo 'Country: '.$user_data[(string)$clientuid]['nation'];
或使用引号:
echo 'Country: '.$user_data["$clientuid"]['nation'];
$ clientuid是一个对象,而不是简单的字符串值,请先从$ clientuid中获取值,然后再使用该变量。
我没有使用TeamSpeak3_Helper_String对象,但是经过一番搜索,我发现有些对象可能应该先使用__toString()
方法将其转换为字符串。
请参阅以下链接,这些可能会有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.