在我的本地/开发环境中,MySQLi查询执行正常.但是,当我在我的Web主机环境中上传它时,我收到此错误:
致命错误:在...中的非对象上调用成员函数bind_param()
这是代码:
global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param('i', $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);
Run Code Online (Sandbox Code Playgroud)
为了检查我的查询,我试图通过控制面板phpMyAdmin执行查询,结果是OK.
新的mysqli和有什么区别mysqli_connect?我知道执行查询是不同的;
例如:mysqli->query()和mysqli_query()
为什么有两种不同类型的,什么是需要区别?
我一直在看这段代码一段时间,我看不出问题出在哪里.我一直在阅读整个StackOverflow,但仍无法看到我的错误.
<?php
mysqli_connect("localhost","root","","web_table");
mysql_select_db("web_table") or die(mysql_error());
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
echo "<p> Connection Successful!"
mysqli_query('INSERT INTO web_formitem (ID, formID, caption, key, sortorder, type, enabled, mandatory, data) VALUES (105, 7, Tip izdelka (6), producttype_6, 42, 5, 1, 0, 0)');
echo "<p>Insert successfull";
?>
Run Code Online (Sandbox Code Playgroud)
错误在第13行的某处,那就是mysqli_query('insert....我试图用http://www.w3schools.com/php/php_mysql_insert.asp来帮助自己,但这对我帮助不大.
我正在使用JavaScipt通过AJAX POST将数据发送到PHP脚本的页面上工作。问题是,如果输入的语言不是基于拉丁语的,我最终会在MySQL表中存储乱码。拉丁字母效果很好。
页面本身能够呈现UTF-8字符,如果它们位于页面加载时提供的数据中,这就是我要努力解决的问题。
??????
并保存。请参阅浏览器开发工具中的网络POST请求。
该帖子是通过以下JS函数制作的
function createEmptyStack(stackTitle) {
return $.ajax({
type:'POST',
url:'ajax.php',
data: {
"do": 'createEmptyStack',
newTitle: stackTitle
},
dataType: "json"
});
}
Run Code Online (Sandbox Code Playgroud)
这是我的PHP代码。
header('Content-Type: text/html; charset=utf-8');
$newTitle = trim($_POST['newTitle']);
$db->query("
INSERT INTO t1(project_id, label)
VALUES (".$_SESSION['project_id'].", '".$newTitle."')");
Run Code Online (Sandbox Code Playgroud)
当我像这样检查页面上的编码时:
mb_detect_encoding($_POST['newTitle'], "auto");
Run Code Online (Sandbox Code Playgroud)
我得到结果:UTF-8
我还尝试了以下标头:
header("Content-type: application/json; charset=utf-8");
Run Code Online (Sandbox Code Playgroud)
应该将数据存放在的MySQL表排序规则设置为utf8_general_ci
我还有另一个页面,该页面具有一种形式,用户可以在其中填充相同的表格,并且可以与任何语言完美配合。当我在另一页上查看为什么它能够将相似的数据成功插入db时,我看到以下上面的插入查询:
mysql_query("SET NAMES utf8");
Run Code Online (Sandbox Code Playgroud)
我尝试在查询上方添加同一行,以使数据看起来仍然很乱。我还尝试了以下几种替代方法:
mysql_query("SET CHARACTER SET utf8 ");
Run Code Online (Sandbox Code Playgroud)
和
mysql_set_charset('utf8', $db);
Run Code Online (Sandbox Code Playgroud)
...但无济于事。我被踩了。需要帮助弄清楚它。
环境:
PHP 5.6.40(cgi-fcgi)
MySQL 5.6.45
更新
我进行了更多测试。
我用阿拉伯语短语“这是测试”-??? ??????
看来ajax.php代码可以正常工作。db插入后,它返回UTF-8编码的值,如下所示:“ \ u0647 \ u0630 \ u0627 …
我是Mysqli_*的新手,我收到了这些错误:
警告:mysqli_select_db()期望参数1为mysqli,字符串在第11行的D:\ Hosting\9864230\html\includes\connection.php中给出
警告:mysqli_error()期望在第13行的D:\ Hosting\9864230\html\includes\connection.php中给出1个参数0
数据库选择失败:
<?php
require("constants.php");
// 1. Create a database connection
$connection = mysqli_connect(DB_SERVER,DB_USER,DB_PASS);
if (!$connection) {
die("Database connection failed: " . mysqli_error());
}
// 2. Select a database to use
$db_select = mysqli_select_db(DB_NAME,$connection);
if (!$db_select) {
die("Database selection failed: " . mysqli_error());
}
?>
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来测试php/mysqli连接的连接部分.我正在从Vista上的LAMP服务器迁移到Ubuntu上的相同,并且正在使mysqli工作.我知道所有正确的模块都已安装,PhpMyAdmin可以完美运行.我已经迁移了一个站点,并没有mysqli连接正常工作.我得到的错误是"在非对象上调用成员函数xxx()",当查询本身错误或查询是从错误的连接准备时,通常会弹出.我知道查询本身是好的,因为它在具有完全相同的数据库结构和数据的其他服务器上工作正常.这让我有了联系.我试着编写一个非常简单的测试连接并将其放在一个循环中,例如..
if(***connection here ***)
{ echo "connected"; }
else
{ echo "not connected"; }
Run Code Online (Sandbox Code Playgroud)
它呼应"连接",这很棒.但只是为了检查我在连接中更改了密码,以便我知道它无法连接,它仍然回显"已连接".所以,if/else测试显然不是要走的路....
早上好.
我想知道在PHP中是否有办法通过使用mysqli列出所有可用的数据库.以下在mysql中顺利工作(参见php docs):
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list)) {
echo $row->Database . "\n";
}
Run Code Online (Sandbox Code Playgroud)
我可以改变:
$db_list = mysql_list_dbs($link); // mysql
Run Code Online (Sandbox Code Playgroud)
变成这样的东西:
$db_list = mysqli_list_dbs($link); // mysqli
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,是否可以将创建的mysqli连接转换为常规mysql并继续获取/查询新转换的连接?
如果,例如,对于下面给定的代码,数据库名称无效,如何防止连接错误?
$mysql = new mysqli('localhost', 'user', 'pass', 'wrongdatabase');
if($mysql->connect_errno)
die($mysql->connect_error);
Run Code Online (Sandbox Code Playgroud)
if语句将输出正确的错误消息,但仍然会从第一行发送警告,其中说明
Warning: mysqli::mysqli() [<a href='mysqli.mysqli'>mysqli.mysqli</a>]: (42000/1049): Unknown database 'wrongdatabase' in C:\wamp\www\example.php on line 14
Run Code Online (Sandbox Code Playgroud)
我知道使用PDO你只需将它包装在try/catch块中,但是如何用MySQLi做呢?
如果我创建到两台服务器的两个并行连接:
$gw03 = new mysqli('gw03.example', 'user', 'pass', 'db');
$gw04 = new mysqli('gw04.example', 'user', 'pass', 'db');
if (!$gw03->connect_errno) {
...
} else if (!$gw04->connect_errno) {
...
} else {
echo "Failed to connect to gw03: (" . $gw03->connect_errno . ") " . $gw03->connect_error . PHP_EOL;
echo "Failed to connect to gw04: (" . $gw04->connect_errno . ") " . $gw04->connect_error . PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)
如果 gw03 可用但 gw04 不可用,则结果如下
Failed to connect to gw03: (2002) No route to host
Failed to connect to …Run Code Online (Sandbox Code Playgroud) 我是一个PHP初学者所以请温柔:-)
我在试验mysqli_error.以下代码段检查连接$cxn.
7 ini_set('display_errors',1);
8 error_reporting(E_ALL);
9
10
11 echo "<html>
12 <head><title>Test MySQL</title></head>
13 <body>";
14 $host = "localhost";
15 $user = "test";
16 $password = "test";
17 $database = "PetCatalogFail";
18
19 $cxn = mysqli_connect($host,$user,$password,$database);
20
21 if(!$cxn)
22 {
23 var_dump($cxn);
24
25 $message = mysqli_error($cxn);
26 echo "$message";
27 echo "</body>";
28 echo "</html>";
29 die();
30 }
Run Code Online (Sandbox Code Playgroud)
$database故意被选为不正确的企图使其变为$cxn虚假.但是我收到以下消息:
警告:mysqli_error()要求参数1为mysqli,第25行/var/www/test.com/public_html/temp.php中给出布尔值
var_dump($cxn)给出输出为bool(false).我希望将结果错误消息存储$message并回显它.我使用mysqli_error不正确吗?
我正在使用下面的代码将数据库转换为 JSON。
<?php
header('Content-type:application/json');
mysql_connect('localhost','root','')or die('cannot connect');
mysql_select_db('sanpham');
$sql = "SELECT * FROM cpu";
$result = mysql_query($sql);
if(!$result)
{
echo 'L?i SQL: '.mysql_error();
echo "\r\n<br />";
echo 'SQL: '.$sql;
exit;
}
$rows = array();
while($row=mysql_fetch_array($result)){
$rows[]=$row;
}
echo json_encode($rows);
?>
Run Code Online (Sandbox Code Playgroud)
在我的 PHP 文件中没有错误,没有数据库,没有任何显示。
php ×11
mysqli ×9
database ×2
mysql ×2
ajax ×1
connect ×1
environment ×1
javascript ×1
json ×1
sql-insert ×1
try-catch ×1
ubuntu ×1
utf-8 ×1