问题在于:我今天开始使用mysqli进行交换.没什么大不了的,只需改变一些陈述.一切都很顺利,没有错误......除了我根本无法执行任何查询.我有双重和三重检查我的语法.我甚至开始创建它应该返回错误的情况(试图让它INSERT到不存在的表或者超出列限制或不匹配类型的值)和......什么都没有.它不会返回错误,也不会写入错误.如果参数1不是mysqli类型,它会抱怨.
这是相关的代码:
$con = mysqli_connect("localhost", "root", "","test");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "INSERT INTO files VALUES (NULL, 5, 'hello')";
mysqli_query($con, $query);
Run Code Online (Sandbox Code Playgroud)
没别的了.它运行没有问题,但它从不写记录.我甚至可以将$查询更改为"hdjhkfhhjfkd",它运行没问题.mysqli_query()只是没有执行,期间.我唯一能让它做出反应的是,如果我将$ con更改为其他任何东西,那么它会抱怨它需要一个mysqli类型.
思考?这让我疯狂.
我正在尝试这段代码:
if ($result = $this->mysqli->prepare("SELECT * FROM `mytable` WHERE `rows1`=?"))
{
$result->bind_param("i",$id);
$result->execute();
while ($data = $result->fetch_assoc())
{
$statistic[] = $data;
}
echo "<pre>";
var_dump($statistic);
echo "</pre>";
}
Run Code Online (Sandbox Code Playgroud)
但它抛出以下错误
[Fri Jun 15 12:13:11 2012] [error] [client 127.0.0.1] PHP致命错误:在[myfile.php]中调用未定义的方法mysqli_stmt :: fetch_assoc()
而且我也尝试过:
if ($result = $this->mysqli->prepare("SELECT * FROM `mytable` WHERE `rows1`=?"))
{
$result->bind_param("i",$id);
$rows = $result->execute();
while ($data = $rows->fetch_assoc())
{
$statistic[] = $data;
}
echo "<pre>";
var_dump($statistic);
echo "</pre>";
}
Run Code Online (Sandbox Code Playgroud)
这使得:
[Fri Jun 15 12:22:59 2012] [错误] [client 127.0.0.1] PHP致命错误:在[myfile.php]中的非对象上调用成员函数fetch_assoc() …
我打算mysqli_close($connection)用来关闭$connection.但在结束之前,我需要确保相关的连接是开放的.
我试过了
if($connection)
{
mysqli_close($connection);
}
Run Code Online (Sandbox Code Playgroud)
但它没有用.任何方案?
我有以下代码:
$db_host = 'localhost';
$db_port = '3306';
$db_username = 'root';
$db_password = 'root';
$db_primaryDatabase = 'dsl_ams';
// Connect to the database, using the predefined database variables in /assets/repository/mysql.php
$dbConnection = new mysqli($db_host, $db_username, $db_password, $db_primaryDatabase);
// If there are errors (if the no# of errors is > 1), print out the error and cancel loading the page via exit();
if (mysqli_connect_errno()) {
printf("Could not connect to MySQL databse: %s\n", mysqli_connect_error());
exit();
}
$queryCreateUsersTable = "CREATE TABLE IF NOT EXISTS `USERS` …Run Code Online (Sandbox Code Playgroud) 我知道
mysqli_fetch_assoc,
mysqli_fetch_array,
mysqli_fetch
Run Code Online (Sandbox Code Playgroud)
但是,MYSQLI_BOTH等于mysqli_fetch_array或者它们实际上是不同的?
设置了我可以找到utf-8的charset的所有配置文件和运行时选项之后,用php创建的新mysqli连接仍然将其字符集设置为latin1,这实际上意味着我必须在$mysqli->set_charset('utf8')每次连接时调用.
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($mysqli->connect_error)
err_handle("mysql connect error({$mysqli->connect_errno}).");
if (!$mysqli->set_charset("utf8"))
err_handle("db error({$mysqli->errno}).");
Run Code Online (Sandbox Code Playgroud)
我想知道是否有永久的方式这样做?
在这篇文章中遇到了类似的问题.
show variables like 'character_set%'在调用show之前在mysql服务器上发出一个" "查询$mysqli->set_charset('utf8'):(
这部分在之前的版本中含糊不清)
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server utf8
character_set_system utf8
Run Code Online (Sandbox Code Playgroud)
客户端,连接和结果字符集只能$mysqli->set_charset('utf8')在运行时更改为utf8 .之后它显示:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
Run Code Online (Sandbox Code Playgroud)
我有
default_charset = "utf-8"
Run Code Online (Sandbox Code Playgroud)
在php.ini中设置,和
[client]
default-character-set=utf8
...
[mysqld]
## This option is deprecated in favor …Run Code Online (Sandbox Code Playgroud) 我有一个存储过程(从现在开始的SP),它将数据插入数据库(SaveClient,见下文).完成SP后,我将PHP页面重定向到列出条目的不同PHP页面(FetchObjectList,见下文).在我重新加载/刷新页面之前,列表不会返回新创建的记录.
存储过程有一个COMMIT结尾,我在调用SP后关闭PHP代码中的数据库连接,并检查错误但没有出错.
页面本身返回200状态代码,这意味着它没有被缓存,因此也不能与浏览器相关.
当前的解决方法是sleep(1)在PHP代码中,但是当代码生效时,我不知道它是否足够.我更倾向于让MySQL发出正确的结果集.
编辑:我正在使用PHP的MySQLi对象接口,可能有用的知道.;)
我的devcomputer在Windows 7 x64上安装并运行了PHP 5.2.17,MySQL 5.0.51a(InnoDB)和Apache 2.2.17.
UPDATE
在CALL FetchObjectList('client_tbl', NULL, NULL, 1, 'client_tbl.name ASC', NULL, NULL);SaveClient的末尾添加了以下行.结果集在显示的结果集中没有新创建的客户端.
更新2
我尝试使用这里SQL_NO_CACHE看到但无济于事.
我现在将直接在PHP中尝试相同的SQL,而不是调用SP.
更新9月3日至20日
我已经尝试过任何合理的答案/评论我到目前为止没有任何运气.我今天尝试更新我的PHP和MySQL版本(因为我今天了解到实时服务器将在PHP 5.3.something和MySQL 5.1.something上运行)但是没有让它工作.我需要更新PHP以获得更新的php_mysqli.dll/ libmysql.dll因为我得到的只支持高达5.0.51a并且可能存在我的问题,因为实际数据库中没有任何工作.我尝试libmysql.dll从MySQL安装无济于事.
请注意,我还更改了我所包含的PHP代码,因为我实际上复制了错误的一个调用user_tbl而不是client_tbl并且还简化了它(删除了多个查询)但仍然是相同的结果.
我不知道赏金会发生什么,如果它回复给我,我会再次添加它.
存储过程SaveClient
DELIMITER //
DROP PROCEDURE IF EXISTS work.SaveClient//
CREATE PROCEDURE work.SaveClient(
IN ObjectID INT,
IN UserID INT,
IN ClientName VARCHAR(60),
IN VersionFrom DATETIME,
IN VersionTo DATETIME)
root:BEGIN
DECLARE EXIT HANDLER FOR …Run Code Online (Sandbox Code Playgroud) 我这样做(是的,我使用错误的连接数据,这是强制连接错误)
try {
$connection = new mysqli('localhost', 'my_user', 'my_password', 'my_db') ;
} catch (Exception $e ) {
echo "Service unavailable";
exit (3);
}
Run Code Online (Sandbox Code Playgroud)
但是PHP正在做这个php_warning:
mysqli :: mysqli():( 28000/1045):用户'my_user'@'localhost'拒绝访问(使用密码:YES)
在示例中,我使用错误的连接数据来强制连接错误,但在现实世界中,数据库可能已关闭,或者网络可能已关闭......等等.
问题:是否有办法在不抑制警告的情况下拦截数据库连接的问题?
我正在使用此代码,但我不明白如何检查查询是否返回零行.我该怎么检查?
$results = $mysqli->query("SELECT ANNOUNCE_NUMBER,ANNOUNCEMENTS,ANNOUNCE_TYPE,POST_DATE FROM home WHERE ANNOUNCE_NUMBER NOT LIKE $excludewelcome AND ANNOUNCE_NUMBER NOT LIKE $excludenews ORDER BY ANNOUNCE_NUMBER DESC LIMIT $position, $items_per_group");
if ($results) {
//output results from database
while($obj = $results->fetch_object())
{
if($obj->ANNOUNCE_TYPE=='NEWSEVENTS')
{
$realstring='News and Events';
}
else
{
$realstring='Welcome Note';
}
echo '<li id="item_'.$obj->ANNOUNCE_NUMBER.'"><strong>'.$realstring.'</strong></span>';
echo '<br \>';
echo '('.$obj->POST_DATE.' ) <span class="page_message">'.$obj->ANNOUNCEMENTS.'</span></li>';
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个问题,我无法从MySQL数据库中检索结果(通过PHP).我在其他地方使用相同的功能,它完美无瑕.但是在这一点上我一直得到"警告:mysqli_query():无法获取mysqli"错误.下面解释问题的细节.我在PHP中使用了一个非常相似的函数(如下所示的getAllCountries),它可以完美地工作:
function getAllCountries()
{
$result = db_query("SELECT countryid, name FROM country ORDER BY name ASC");
echo "<select class=addresscountry name=country>";
while($row = mysqli_fetch_array($result)) {
echo '<option value="' . $row['countryid'] . '">' . $row['name'] . '</option>';
}
echo "</select>";
mysqli_close(db_connect());
}
Run Code Online (Sandbox Code Playgroud)
所以问题如下:
我有一个包含以下代码的php文件:
<?php
require 'includes/functions.php';
function getUserPicPath()
{
$userid = $_SESSION['userid'];
$result = db_query("SELECT picture FROM user WHERE userid='$userid'");
while($row = mysqli_fetch_array($result)) {
$picturepath = $row['picture'];
}
echo $picturepath;
mysqli_close(db_connect());
}
Run Code Online (Sandbox Code Playgroud)
我的functions.php文件有以下行(与其他不相关的函数一起):
require 'dbfunctions.php';
Run Code Online (Sandbox Code Playgroud)
我的dbfunctions.php看起来像这样:
<?php
function db_connect()
{
require ".db_password.php"; …Run Code Online (Sandbox Code Playgroud)