簡體   English   中英

PDO語句在PHP 7中不再起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM