[英]PDO Statement does not work anymore in PHP 7
當我從PHP 5.6切換到7.0或7.2。時,此語句不再起作用:
$translator = new stdClass();
$sql = "SELECT name, value FROM ".$tab_translator." WHERE lang_id=:lang_id";
try {
$fetchTextTranslated = $conn->prepare($sql);
$fetchTextTranslated->bindValue(':lang_id', (int) trim($translator_lang_id), PDO::PARAM_INT);
$fetchTextTranslated->execute();
}
catch(PDOException $e) {
if ($config->debug==1) { echo 'Error: ' . $e->getMessage(); }}
while ($textTranslated = $fetchTextTranslated->fetch(PDO::FETCH_ASSOC)) {
$translator->$textTranslated['name']=$textTranslated['value'];
}
當我回顯$textTranslated['name']
或$textTranslated['value']
我確實從表中獲取數據。 但是我希望獲取的數據采用stdClass對象$ translator的形式,並且在PHP 7及更高版本中不再有效。
多謝您的協助。
我只想提到變量變量的使用通常是數據存儲體系結構欠佳的征兆,但在某些情況下可能會獲得優勢。 不過,通常,請盡可能避免使用可變變量。
請閱讀有關統一變量語法的信息 。
https://www.oreilly.com/ideas/upgrading-to-php7#uniform_variable_syntax
您必須將動態屬性括在花括號中。
$translator->{$textTranslated['name']} = $textTranslated['value'];
// ^-----------------------^
這可以消除嘗試評估生產線時可能出現的混亂/矛盾。 同樣,請參閱我的鏈接文檔。
我的意思是,您的代碼可能打算做一些完全不同的事情,例如:
您想要將數據作為具有鍵name
的元素存儲在$translator->$textTranslated
屬性(變量屬性)中。 ...您沒有,但是我只是說,此php7的改進消除了從左到右閱讀時的歧義。
作為記錄,以下是替代方法的語法(您不應在任務中使用該語法):
($translator->$textTranslated)['name'] = $textTranslated['value'];
看到不同?
其他參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.