PHP致命错误:在非对象(OPENSHIFT)上调用成员函数execute()

时间:2014-12-17 08:03:26

标签: php mysqli openshift

出现此错误:

  

PHP致命错误:在非对象上调用成员函数execute()

将新数据推送到我的openshit应用程序。

function createAppInfo($title,$blog_link,$job_link,$description,$author,$status){

        $db = dbopen();
        $title = $db->real_escape_string($title);
        $author = $db->real_escape_string($author);
        $description = $db->real_escape_string($description);
        $job_link = $db->real_escape_string($job_link);
        $blog_link = $db->real_escape_string($blog_link);
        $status = $db->real_escape_string($status);

        $stmt = $db->prepare("INSERT INTO `app`(title,blog_link,job_link,description,author,status) 
            values('$title','$blog_link','$job_link','$description','$author','$status')");
        $stmt->bind_param('s',$title,$blog_link,$job_link,$description,$author,$status);   // bind inputs to the parameter

        /* execute prepared statement */
        $stmt->execute();
        $stmt->close();
        return true;
    }

这是我正在运行的代码,但在我看来,Openshift正在臃肿准备或准备工作不正常我不知道..因为代码正在本地机器上工作。 此外,我将其更改为常规$db-query(INSERT),其工作绝对正常。

更新

dbcon.php 文件

<?php
function dbopen(){
  $host="localhost"; // Host name 
  $username="**"; // Mysql username 
  $password="**"; // Mysql password 
  $db_name="***"; // Database name 

 $db= new mysqli($host, $username, $password, $db_name);
  if (!$db)
    {
    die('Could not connect: ' . mysql_error());
    }

  return($db);
}?>

我包含此文件以调用dbopen()

2 个答案:

答案 0 :(得分:0)

  1. 请参阅http://php.net/manual/fr/pdostatement.bindparam.php,参数数量不多......
  2. 请参阅@class评论:为什么绑定参数已包含在您的请求中?
  3. 所以也许尝试这样的smthg会有所帮助吗? :

    $stmt = $db->prepare("INSERT INTO `app` (title,blog_link,job_link,description,author,status)  values(:title,:blog_link,:job_link,:description,:author,:status)");
    $stmt->bind_param(':title',$title);
    $stmt->bind_param(':blog_link', $blog_link);
    etc...
    $stmt->execute();
    

    或者只是让你的prepare像你一样,但忘了bind_param(但以前的解决方案应该更安全)。

答案 1 :(得分:0)

首先,您根本不需要使用real_escape_string,预处理语句会自动转义所有值。其次,在绑定参数时,需要为每个参数指定类型(下面的答案假定所有都是字符串)。

编辑: 在进行一些研究时,您必须在通过openshift建立连接时使用MYSQL cartridge中的环境变量。

<强> dbcon.php:

<?php
function dbopen(){

define('DB_HOST', getenv('OPENSHIFT_MYSQL_DB_HOST'));
define('DB_PORT', getenv('OPENSHIFT_MYSQL_DB_PORT'));
define('DB_USER', getenv('OPENSHIFT_MYSQL_DB_USERNAME'));
define('DB_PASS', getenv('OPENSHIFT_MYSQL_DB_PASSWORD'));
define('DB_NAME', getenv('OPENSHIFT_GEAR_NAME'));

 $db= new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
  if (!$db)
    {
    die('Could not connect: ' . mysql_error());
    }

  return($db);
}?>

MYSQL查询:

$db = dbopen();
$stmt = $db->prepare("INSERT INTO `app`(title,blog_link,job_link,description,author,status)
VALUES(?,?,?,?,?,?)");

$stmt->bind_param('ssssss',$title,$blog_link,$job_link,$description,$author,$status);

/* execute prepared statement */
$stmt->execute();
$stmt->close();