标签: mysqli

如何查看准备好的声明的内容?

我正在努力学习在PHP中使用mysqli的预处理语句,通常,如果我遇到查询问题,我只需将它回显到屏幕上,看看它的第一步看起来是什么样子.

如何用准备好的声明做到这一点?

我希望在替换变量后看到SQL语句.

php mysql mysqli

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

一个准备好的语句,`WHERE .. IN(..)`查询和排序 - 用MySQL

想象一下,我们有一个查询:

SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;
Run Code Online (Sandbox Code Playgroud)

以及要获取的ID数组: $ids = array(1,5,18,25)

准备好的陈述,建议准备一个陈述并多次调用:

$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;');
foreach ($ids as $id){
    $stmt->bind_params('i', $id);
    $stmt->exec();
    }
Run Code Online (Sandbox Code Playgroud)

但现在我必须手动对结果进行排序.我有什么好的选择吗?

php mysql mergesort mysqli prepared-statement

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

从mysql连接迁移到mysqli

我有一个我以前用于脚本的函数.openDBConn()closeDBConn()这些都被称为mysql_connect()功能.使用如下所示

openDBConn();
$car_model = getCarModel($car_id);
$car_color = getCarColor($car_id);
closeDBConn();
Run Code Online (Sandbox Code Playgroud)

这样做也允许我做以下事情

openDBConn();
mysqlStartTranscation();

upgradeCarColor($car_id);
addNewWing($car_id);

mysqlCommit();
closeDBConn();
Run Code Online (Sandbox Code Playgroud)

现在的困境是,如果我转移到mysqli,我将需要传递连接链接.

我还看到mysql_*被弃用了我的问题:

  1. 在我的大部分功能停止工作之前,我有多少时间?
  2. 有没有当前或未来的方式来访问当前的mysqli连接,因为在我的函数中添加额外的参数会很痛苦?
  3. 是否有任何正确的编码方式以程序方式访问当前的mysqli连接链接.如果不是程序性的,那么以OOP方式最好的是什么?

php mysql connection mysqli

21
推荐指数
1
解决办法
7451
查看次数

使用参数数组绑定Param

我有一个功能,这样做:

function registerUser($firstName, $lastName, $address, $postcode, $email, $password)
{
    $params = array($firstName, $lastName, $address, $postcode, $email, $password);
    $result = $this->db->bind("INSERT INTO Users VALUES (?, ?, ?, ?, ?, ?)", 'ssssss', $params);
}
Run Code Online (Sandbox Code Playgroud)

哪个发送到我的数据库类,它执行此操作:

public function bind($query, $type, $params)
{
    $this->query = $query;
    $stmt = $this->mysqli->prepare($this->query);
    $stmt->bind_param($type, $param);
    $stmt->execute;
}
Run Code Online (Sandbox Code Playgroud)

问题是这不起作用.

我希望做的是获取$params列表并将其列在之后$type,以便查询类似于:

$stmt->bind_param('ssssss', $firstName, $lastName, $address, $postcode, $email, $password);
Run Code Online (Sandbox Code Playgroud)

但显然我的方式是错误的.

有没有办法让数组......按原样转换成一个列表,在bind_param查询阶段打印出来?

php mysqli bind

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

使用预准备语句时是否需要mysql_real_escape_string()?

对于这个查询,有必要使用mysql_real_escape_string吗?

任何改进或查询都没问题?

$consulta = $_REQUEST["term"]."%";

($sql = $db->prepare('select location from location_job where location like ?'));

$sql->bind_param('s', $consulta);
$sql->execute();
$sql->bind_result($location);

$data = array();

while ($sql->fetch()) {
    $data[] = array('label' => $location);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,查询速度很重要.

php mysql mysqli prepared-statement sanitize

20
推荐指数
1
解决办法
6836
查看次数

致命错误:调用未定义的方法mysqli_result :: fetch_all()

我在Ubuntu 10.04中遇到PHP问题.当我尝试使用mysqli_result :: fetch_all时出现此错误:

调用未定义的方法mysqli_result :: fetch_all()

但是,它适用于Windows XP.

代码:

$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)

我不想在循环中使用fetch_assoc,因为我将结果发送到另一个层进行处理.

我使用的是PHP 5.4.4.和php -m | grep mysql mysqlnd模块它没有出现.我该如何安装?这可能是问题吗?

php mysqli fetchall mysqlnd

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

为什么不推荐使用PHP的mysql_函数?

在我不久前停止使用这些功能的时候,玩Devil's Advocate,但这个问题是真实的,可能对很多SO用户很重要.

我们都知道mysql_以错误的方式使用函数可能非常危险,它可能会使您的网站容易受到攻击等,但正确使用这些函数可以防止SQL注入,并且实际上比新的PDO函数一点.

考虑到这一切,为什么这些mysql_功能已被弃用?

php mysql mysqli pdo

20
推荐指数
1
解决办法
9476
查看次数

PHP UPDATE准备好的声明

嗨,我正在尝试学习使用预准备语句的正确方法,以避免SQL注入等.

当我执行脚本时,我从我的脚本中得到一条消息,说0行已插入,我希望这可以说1行插入,当然更新表.我对我准备好的陈述并不完全确定,因为我做了一些研究,我的意思是它因例子而异.

当我更新我的表时,我需要声明所有字段还是只更新一个字段?

任何信息都会非常有用.

的index.php

<div id="status"></div>

    <div id="maincontent">
    <?php //get data from database.
        require("classes/class.Scripts.inc");
        $insert = new Scripts();
        $insert->read();
        $insert->update();?>

       <form action="index2.php" enctype="multipart/form-data" method="post" name="update" id="update">
              <textarea name="content" id="content" class="detail" spellcheck="true" placeholder="Insert article here"></textarea>
        <input type="submit" id="update" name="update" value="update" />
    </div>
Run Code Online (Sandbox Code Playgroud)

类/ class.Scripts.inc

public function update() {
    if (isset($_POST['update'])) {
                    $stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
                    $id = 1;
                    /* Bind our params */                           
                    $stmt->bind_param('is', $id, $content);
                    /* Set our params */
                    $content = isset($_POST['content']) ? $this->mysqli->real_escape_string($_POST['content']) …
Run Code Online (Sandbox Code Playgroud)

php mysqli prepared-statement sql-update

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

$ stmt-> close()vs $ stmt-> free_result()

我想在最终确定准备好的mysqli语句时澄清$ stmt-> close()$ stmt-> free_result()之间的区别.


到目前为止我使用:

$mysqli = new mysqli(host,user,password,database);
$stmt = $mysqli->prepare(sql statement);
[...]
$stmt->free_result();
$mysqli->close();
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好.

但是我看到很多程序员使用$ stmt-> close而不是$ stmt-> free_result().一旦我看到他们两个:

$stmt->free_result();
$stmt->close();
$mysqli->close();
Run Code Online (Sandbox Code Playgroud)

那么我应该选择什么,在哪种情况下以及为什么?

php mysql mysqli prepared-statement

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

mysqli_result类的对象无法转换为字符串

我收到错误:

Object of class mysqli_result could not be converted to string

这是我的代码:

$username2 = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');

$con = mysqli_connect('localhost','root','','test');

$result = mysqli_query($con, "SELECT classtype FROM learn_users
                        WHERE username='$username2';");

echo "my result <a href='data/$result.php'>My account</a>";
Run Code Online (Sandbox Code Playgroud)

php mysqli

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