在PHP中链接数据库的内部服务器错误

时间:2014-02-06 21:10:48

标签: php mysql

我有一个数据库,我想用它来为我正在使用Xcode的应用程序创建一个数组。我正在按照我在互联网上找到的教程here,我按照说明操作,但我的页面显示内部服务器错误。我假设我没有正确更改以下代码中的信息。另外,我的网站主机使用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();

?>

2 个答案:

答案 0 :(得分:4)

PHP变量必须以字母或_开头,因此您的错误源于此声明:

$stmt->bind_result($1);

将变量名称更改为$ col1或任何有意义的名称。

此外,您的select语句将返回单个值:1。您可能意味着这样做:

SELECT * FROM descriptions

另外两点:

  • 除非您打算使用交易,否则不应禁用自动提交。
  • 不需要使用不包含不受信任的输入的简单查询来准备语句。您可以使用$ this-&gt; db-&gt; query(“...”)'。如果你改变它,你需要调整其他语句来匹配。

答案 1 :(得分:0)

内部服务器错误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

始终最好地使您的陈述非常透彻