标签: mysqli

如何在mysqli预处理语句中使用IN子句

我正在使用预处理语句将一些旧代码移动到新的msqli接口,我在使用包含IN子句的SQL语句时遇到问题.我通常会这样做:

$ids = '123,535,345,567,878'
$sql = "SELECT * FROM table WHERE id IN ($ids)";
$res = mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)

将其转换为mysqli和预处理语句我尝试了许多解决方案:

$ids = '123,535,345,567,878'
$ids = implode($ids,',');
$result = $msqli->prepare("SELECT foo,blar FROM table WHERE id IN (?));
$result->bind_param("i", $ids);
$result->execute();
Run Code Online (Sandbox Code Playgroud)

上面的操作失败并计算了数组中的元素数量并改变了SQL字符串中的问号数量,并且对数组中的每个元素调用bind_parm也失败了.仅使用逗号分隔的字符串也会失败.

我在谷歌上找不到好的文档,你怎么解决这个问题?

php mysqli sql-in

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

检查变量是否为mysqli对象类型?

我如何检查变量是否是mysqli类型的对象?

php mysqli

13
推荐指数
2
解决办法
7455
查看次数

MYSQLi错误:用户已经有超过'max_user_connections'的活动连接

我在运行的网站上有以下错误.我不明白为什么它在我的localhost上工作正常.这与主持人有关吗?我在Unix服务器上.

Warning: mysqli::mysqli() [mysqli.mysqli]: (42000/1203): User dbo343879423 already has more than 'max_user_connections' active connections in /homepages/9/d322397966/htdocs/dump/models/class_database.php on line 11
Connect failed: User dbo343879423 already has more than 'max_user_connections' active connections 
Warning: mysqli::close() [mysqli.close]: Couldn't fetch mysqli in /homepages/9/d322397966/htdocs/dump/models/class_database.php on line 160
Run Code Online (Sandbox Code Playgroud)

错误显示'用户dbo343879423已经在第11行的/homepages/9/d322397966/htdocs/dump/models/class_database.php中有超过'max_user_connections'活动连接,所以这是脚本中的第11行 - 我可以'看错了!

$this -> connection = new mysqli($hostname,$username,$password,$database);
Run Code Online (Sandbox Code Playgroud)

下面是class_database.php中的整个类,在脚本的其他部分是不对的,我应该改变?

<?php
#connects the database and handling the result
class __database {

    protected $connection = null;
    protected $error = null;

    #make a connection
    public function __construct($hostname,$username,$password,$database)
    {
        $this -> connection …
Run Code Online (Sandbox Code Playgroud)

php mysql error-handling mysqli

13
推荐指数
4
解决办法
7万
查看次数

在MySQLi中不能通过引用传递参数

我试图将一个字符串传递给我的MySQLi预处理语句,但它给了我错误:

在MySQLi中不能通过引用传递参数

这是相关代码:

$kv = json_encode(array($key => $value));
$stmt->prepare("insert into rules (application_id, ruletype, rule_name, rule_info) values (?, ?, ?, ?);");
$stmt->bind_param('iiss', $application_id, 1, $config_name, $kv);
Run Code Online (Sandbox Code Playgroud)

php mysql binding mysqli prepared-statement

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

在codeigniter中执行多个查询,这些查询无法逐个执行

我有一个"事件"表.为简单起见,您可以想象它应该像分层类别.它使用嵌套集模型(感谢Mark Hillyer在http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/上的帖子)

我的代码:

$query = 
"LOCK TABLE event WRITE;
SELECT @ParentRight := parent.rgt, @Level := parent.level FROM event AS parent WHERE parent.id = '{$data['parent_id']}';

UPDATE event SET rgt = rgt + 2 WHERE rgt > @ParentRight;
UPDATE event SET lft = lft + 2 WHERE lft > @ParentRight;

INSERT INTO event(lft, rgt, level) VALUES(@ParentRight, @ParentRight + 1, @Level);
UNLOCK TABLES;";

mysqli_multi_query($this->db->conn_id, $query);

$data['id'] = $this->db->insert_id();
return $this->db->update('event', $data);
Run Code Online (Sandbox Code Playgroud)

之后我将用更新最后插入的对象 $this->db->update('event', $data)

$data 是用户填充的数组.


问题1: …

php mysql mysqli codeigniter multi-query

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

Mysqli get_result另类

我刚刚使用mysqli将所有sql查询更改为准备好的语句.为了加快这个过程,我创建了一个performQuery替换的函数(被称为)mysql_query.它接受查询,绑定(如"sdss")和传入的变量,然后执行所有perpared语句.这意味着更改所有旧代码很容易.我的函数mysqli_result使用mysqli 返回一个对象get_result().

这意味着我可以改变我的旧代码:

$query = "SELECT x FROM y WHERE z = $var";
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)){
    echo $row['x'];
}
Run Code Online (Sandbox Code Playgroud)

$query = "SELECT x FROM y WHERE z = ?";
$result = performQuery($query,"s",$var);
while ($row = mysql_fetch_assoc($result)){
    echo $row['x'];
}
Run Code Online (Sandbox Code Playgroud)

这在localhost上工作正常,但我的web托管服务器没有mysqlnd可用,因此get_result()不起作用.安装mysqlnd不是一个选项.

从这里出发的最佳方式是什么?我可以创建一个替换的功能get_result(),以及如何?

php mysqli

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

PHP到EasyPHP MySQL服务器1秒连接延迟

我在这里问这个,因为我认为它不仅适用于EasyPHP本身.

我目前使用EasyPHP作为我的WAMP开发服务器,因此我可以创建Web应用程序.问题是,当我将mysqli对象连接到数据库时需要1秒钟.在共享主机上运行相同的查询会导致速度超过200倍.这应该是我应该担心的吗?在可伸缩性或将我的应用程序移动到另一台服务器方面,花一点时间看看问题是否明智?我只是假设也许EasyPHP很慢.不是一个专业,只是让我觉得有趣的东西.

php mysqli easyphp

13
推荐指数
2
解决办法
7852
查看次数

mysqli查询结果显示所有行

我有以下代码:

include $_SERVER['DOCUMENT_ROOT'].'/include/conn.php'; 

$query = "SELECT title FROM news_event";
$result = $mysqli->query($query);
$row = $result->fetch_array(MYSQLI_BOTH);
$row_cnt = $result->num_rows;
$result->free();
$mysqli->close();
Run Code Online (Sandbox Code Playgroud)

这是好的,如果只有一个结果,我可以只回声$行["标题"],但如果有很多的结果,我该如何通过和打印每一行得到这个循环?

我确定这很简单,但我不确定我需要在谷歌搜索什么.

我正在寻找一个与此相当的mysqli:

while($row = mysql_fetch_array($result))
  {
  echo $row['FirstName'] . " " . $row['LastName'];
  echo "<br />";
  }
Run Code Online (Sandbox Code Playgroud)

php mysqli while-loop

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

通过php发送html表单数据到sql数据库(使用mysqli)

我想将输入到html表单的数据发送到我的sql数据库,即创建一个新行,将某些值归因于某些列.我知道有类似的问题,我读了答案,但似乎没有任何效果.

send_post.php

<?php
//Connecting to sql db.
$connect = mysqli_connect("my host","my user","my passwrod","my db");
//Sending form data to sql db.
mysqli_query($connect,"INSERT INTO posts (category, title, contents, tags)
VALUES ('$_POST[post_category]', '$_POST[post_title]', '$_POST[post_contents]', '$_POST[post_tags]')";
?>
Run Code Online (Sandbox Code Playgroud)

post.html#形式

<form onSubmit="send_post.php" method="post">
    <h3>Category:</h3>
    <input type="text" name="post_category">
    <h3>Post title:</h3>
    <input type="text" name="post_title">
    <h3>Post tags (a,b,c...):</h3>
    <input type="text" name="post_tags">
    <h3>Post (use html):</h3>
    <textarea rows="20" cols="50" name="post_contents"></textarea>
    <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

我的db"posts"表colums:

pid
title
contents
tags
category
Run Code Online (Sandbox Code Playgroud)

pid具有auto_increment

我已经尝试向所有歌曲发送值,包括pid和"正确"顺序.

mysqli_connect部分不是问题,因为我从我的另一个.php文件中复制了它.

服务器php-sql兼容性也不是问题,因为我成功地有一个不同的.php文件从db中检索数据(手动插入的数据).

html php sql forms mysqli

13
推荐指数
1
解决办法
8万
查看次数

在JPA中选择具有1个条件的每个用户的最近日期的行

我有这个实体,我想为每个设备列出属性message = 1的最后一个事件

@Entity
@Table(name = "t_device_event")
@NamedQueries(value = { 
@NamedQuery(name = "DeviceEvent.findWithMessageActive",
            query = "from DeviceEvent as de1 where de1.message = 1 and de1.received = " 
                  + " ( select max(de2.received) from DeviceEvent de2 " 
                  + " where de2.device.id = de1.device.id )  "), )
public class DeviceEvent {
     ..
}
Run Code Online (Sandbox Code Playgroud)

但是在最后一次测试中我有一个断言问题,因为它认为device3是最后一个事件,而不是这种情况.

assertTrue ((numDevicesWithActiveMessage+1) == deviceEventService.findWithActiveMessage().size());

DeviceEvent deviceEvent3 = newDeviceEvent();
deviceEvent3.setMessage(1);
deviceEventService.save(deviceEvent3);

DeviceEvent deviceEvent4 = newDeviceEvent();
deviceEventService.save(deviceEvent4);

assertTrue ((numDevicesWithActiveMessage+1) == deviceEventService.findWithActiveMessage().size());
Run Code Online (Sandbox Code Playgroud)

java sql junit mysqli jpa

13
推荐指数
1
解决办法
539
查看次数