簡體   English   中英

在PHP中鏈接數據庫時發生內部服務器錯誤

[英]Internal Server Error with linking database in PHP

我有一個數據庫,該數據庫用於為Xcode中正在處理的應用程序創建數組。 我下面的教程我在互聯網上找到這里 ,我跟着指示,但我的頁顯示的是一個內部服務器錯誤。 我假設我沒有正確更改以下代碼中的信息。 另外,我的Web主機使用MYSQL而不是MYSQLite,因此我不確定在代碼中將“ new mysqli”更改為什么。 由於明顯的原因,我省略了數據庫信息。 該數據庫具有一個名為“描述”的表,並且這些列標記為1-50,並分配了不同的值。

<?php

class RedeemAPI {
    private $db;

    // Constructor - open DB connection
    function __construct() {
        $this->db = new mysqli('hostname', 'Username', 'Pass', 'Database Name');
        $this->db->autocommit(FALSE);
    }

    // Destructor - close DB connection
    function __destruct() {
        $this->db->close();
    }

    // Main method to redeem a code
    function redeem() {
        // Print all codes in database
        $stmt = $this->db->prepare('SELECT 1 FROM descriptions');
        $stmt->execute();
        $stmt->bind_result($1);
        while ($stmt->fetch()) {
            echo "$1";
        }
        $stmt->close();
    }
}

// This is the first thing that gets called when this page is loaded
// Creates a new instance of the RedeemAPI class and calls the redeem method
$api = new RedeemAPI;
$api->redeem();

?>

PHP變量必須以字母或_開頭,因此您的錯誤源於以下語句:

$stmt->bind_result($1);

將變量名稱更改為類似$ col1之類的名稱。

同樣,您的select語句將返回一個值:1.您可能打算這樣做:

SELECT * FROM descriptions

另外兩點:

  • 除非您打算使用事務,否則不應禁用自動提交。
  • 無需使用不包含不可信輸入的簡單查詢來准備語句。 您可以只使用$ this-> db-> query(“ ...”)'。 如果更改此設置,則需要調整其他語句以使其匹配。

內部服務器錯誤500可能掩蓋了一些有用的錯誤消息。 在php.ini / php5.ini中打開調試開關

將此添加到您的php.ini / php5.ini中,或僅將這些文件之一添加到您網站的根目錄即可

display_errors = On
display_startup_errors = On
error_reporting = -1

其次,如果您的主機未運行MYSQLi,則它們正在運行真正的舊php,因為MYSQLi在php4.1.3及更高版本中是標准的

第三,該SQL語句..它只是某種粗略的示例,還是您的實際語句? 如果您要提取一條記錄,應該是

SELECT * FROM tablename.description LIMIT 1

始終最好使您的陳述非常透徹

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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