在非对象上调用成员函数prepare()

时间:2014-06-10 18:35:20

标签: php mysql sql

我没有为这个问题找到任何解决方案,所以我在这里问:我该如何解决?我的代码是:

function dbc()
{
    mysql_connect("HOST", "USER", "MYPASS") or die(mysql_error()); 
    mysql_select_db("DBNAME") or die(mysql_error());
}

dbc();

$id = rand(0, 99999999);
$type = 'mushroom';
$amount = '100';
$used = '1';

$qry = $db->prepare ( "INSERT INTO vouchers(id, code, type, amount, used)
                        VALUES(:id, :code, :type, :amount, :used)" );
$qry->bindParam ( ':id', $id );
$qry->bindParam ( ':code', $id );
$qry->bindParam ( ':type', $type );
$qry->bindParam ( ':amount', $amount );
$qry->bindParam ( ':used', $used );
$res = $qry->fetchAll ();

所以我问你,问题在哪里?

3 个答案:

答案 0 :(得分:1)

不要将MYSQL与PDO混合使用。下面的代码将建立一个简单的PDO连接,因为除了不推荐使用的MySQL_之外,你似乎也在使用它。对于new PDO();的DSN字段,输入mysql:dbname=*dbname*;host=*host*,将 dbname 替换为您的数据库名称,将 host 替换为您的主机。另外,如果不这样做,try和catch函数很容易理解。在try函数中,脚本正在运行,catch函数捕获您获得的任何错误并将它们回显到屏幕。

    function dbc()
    {
        try {
        $db = new PDO("DSN", "USER", "MYPASS");
        } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
      }
    }

dbc();

$id = rand(0, 99999999);
$type = 'mushroom';
$amount = '100';
$used = '1';
$qry = null;

$qry = $db->prepare ( "INSERT INTO vouchers(id, code, type, amount, used)
                        VALUES(:id, :code, :type, :amount, :used)" );

$qry->execute(array(
                ':id' => $id,
                ':code' => $id,
                ':type' => $type,
                ':amount' => $amount,
                ':used' => $used
            ));

答案 1 :(得分:0)

您在prepare上呼叫$db,而$db为空。你似乎在使用MySQL,这是非常弃用的。请使用更安全的MySQLi或PDO。

我认为您可能正在尝试使用PDO,但您无法将语法与MySQL混合使用。有关如何在PDO中正确初始化$db变量的示例,请参阅this link

答案 2 :(得分:0)

致电$db时,

$db->prepare()为空。

$db = null;

$qry = null;

$sql = "INSERT INTO `d64952_s1`.`vouchers` 
    (`id`, `code`, `type`, `amount`, `used`) 
    VALUES (NULL, \'\', \'mushroom\', \'\', \'1\');";

$qry = $db->prepare ( "INSERT INTO vouchers(id, code, type, amount, used)
                        VALUES(:id, :code, :type, :amount, :used)" );

看起来你也试图将mysql_ *与PDO混合在一起,但这也不起作用。