首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP致命错误:调用非对象上的成员函数execute() ( OPENSHIFT )

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

Stack Overflow用户
提问于 2014-12-17 08:03:26
回答 2查看 408关注 0票数 0

获取此错误:

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

同时把新的数据推送到我的开源应用程序中。

代码语言:javascript
运行
复制
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是在博客、准备或准备中不正确地工作--我不know..cause --代码正在本地机器上运行。另外,我把它改为常规的$db-query(INSERT) --它的工作非常好。

更新:

dbcon.php文件

代码语言:javascript
运行
复制
<?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()

EN

回答 2

Stack Overflow用户

发布于 2014-12-17 08:29:11

  1. http://php.net/manual/fr/pdostatement.bindparam.php,没有那么多的参数.
  2. 请参阅@class注释:为什么要使用bindparam来获取已经包含在请求中的参数?

所以也许像这样的尝试会有帮助?:

代码语言:javascript
运行
复制
$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 (但是以前的解决方案应该更安全)。

票数 0
EN

Stack Overflow用户

发布于 2014-12-17 08:35:05

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

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

dbcon.php:

代码语言:javascript
运行
复制
<?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查询:

代码语言:javascript
运行
复制
$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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27520839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档