获取此错误:
PHP致命错误:调用非对象上的成员函数execute()
同时把新的数据推送到我的开源应用程序中。
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文件
<?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()
发布于 2014-12-17 00:29:11
所以也许像这样的尝试会有帮助?:
$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
(但是以前的解决方案应该更安全)。
发布于 2014-12-17 00:35:05
首先,您根本不需要使用real_escape_string
,准备好的语句会自动转义所有值。其次,当绑定您的参数时,您需要为每个参数指定类型(下面的答案假设所有都是字符串)。
编辑:在做一些研究时,在通过openshift建立连接时必须使用MYSQL墨盒中的环境变量。
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();
https://stackoverflow.com/questions/27520839
复制