标签: mysqli

在执行mysqli_query时遇到问题

问题在于:我今天开始使用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类型.

思考?这让我疯狂.

php mysql mysqli

16
推荐指数
1
解决办法
5万
查看次数

如何从准备好的语句中获取关联数组中的所有内容?

我正在尝试这段代码:

    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() …

php mysqli

16
推荐指数
3
解决办法
7万
查看次数

如何在关闭之前检查mysqli连接是否打开

我打算mysqli_close($connection)用来关闭$connection.但在结束之前,我需要确保相关的连接是开放的.

我试过了

if($connection)
{
  mysqli_close($connection);
}
Run Code Online (Sandbox Code Playgroud)

但它没有用.任何方案?

php mysqli

16
推荐指数
4
解决办法
5万
查看次数

CREATE TABLE如果NOT EXISTS失败,表已经存在

我有以下代码:

$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)

php mysql sql mysqli

16
推荐指数
2
解决办法
8万
查看次数

mysqli_fetch_array和MYSQLI_BOTH之间有什么区别?

我知道

mysqli_fetch_assoc,
mysqli_fetch_array,
mysqli_fetch
Run Code Online (Sandbox Code Playgroud)

但是,MYSQLI_BOTH等于mysqli_fetch_array或者它们实际上是不同的?

php mysqli

16
推荐指数
7
解决办法
2万
查看次数

做mysqli-> set_charset()的永久方法?

设置了我可以找到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)

php mysql mysqli character-encoding

15
推荐指数
1
解决办法
2万
查看次数

SP插入后,下一页的结果为空,直到重新加载

我有一个存储过程(从现在开始的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)

php mysql mysqli stored-procedures

15
推荐指数
1
解决办法
669
查看次数

new mysqli():如何拦截'无法连接'错误?

我这样做(是的,我使用错误的连接数据,这是强制连接错误)

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)

在示例中,我使用错误的连接数据来强制连接错误,但在现实世界中,数据库可能已关闭,或者网络可能已关闭......等等.

问题:是否有办法在不抑制警告的情况下拦截数据库连接的问题?

php mysqli

15
推荐指数
2
解决办法
3万
查看次数

检查查询结果是否为空行mysqli

我正在使用此代码,但我不明白如何检查查询是否返回零行.我该怎么检查?

$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)

php mysql mysqli

15
推荐指数
1
解决办法
6万
查看次数

警告:mysqli_query():无法获取mysqli

我有一个问题,我无法从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)

php mysql mysqli

15
推荐指数
1
解决办法
5万
查看次数

标签 统计

mysqli ×10

php ×10

mysql ×6

character-encoding ×1

sql ×1

stored-procedures ×1