gpt4 book ai didi

php - sprintf 错误如 %%?%%

转载 作者:行者123 更新时间:2023-11-29 07:57:58 24 4
gpt4 key购买 nike

我在理解使用 sprintf 时的错误时遇到一些困难。

当前查询是:

$sql = sprintf('SELECT *
FROM %s
INNER JOIN %s a ON (a.user_id = created_by)
LEFT JOIN %s b ON (b.user_id = modified_by)
WHERE provider_name LIKE "%%?%%"
LIMIT ?,?', TABLE_NAME1, TABLE_NAME2, TABLE_NAME3);
$q = $this->db->query($sql, array($q, $page['si'], (int)$offset));

此行发生错误:WHERE provider_name LIKE "%%?%%"

我已经尝试使用以下方法多次更改它:

  1. 哪里的provider_name LIKE“%%%?%%%”
  2. 哪里的provider_name LIKE“%?%”
  3. 哪里的provider_name LIKE %%?%%
  4. 哪里的provider_name LIKE %%%?%%%

我仍然收到错误..

错误:

A PHP Error was encountered

Severity: Warning

Message: sprintf(): Too few arguments

=====================================

A PHP Error was encountered

Severity: 4096

Message: Object of class CI_DB_mysql_result could not be converted to string

Filename: database/DB_driver.php

Line Number: 604

我应该如何使用 sprintf 正确执行此操作?

注意:我使用的是 codeigniter,因此我使用 ? 进行查询。

最佳答案

您只需要 ?在查询中。

$sql = sprintf('SELECT *
FROM %s
INNER JOIN %s a ON (a.user_id = created_by)
LEFT JOIN %s b ON (b.user_id = modified_by)
WHERE provider_name LIKE ?
LIMIT ?,?', TABLE_NAME1, TABLE_NAME2, TABLE_NAME3);

然后将换行符“%”添加到输入字符串中。

$q = $this->db->query($sql, array('%'.$q.'%', $page['si'], (int)$offset));

这与仅使用 PDO 或 mysqli 相同,我使用 CI(修改太多我不知道我是否仍将其称为 CI)但不进行数据库植入。

使用 sprintf 将表名注入(inject)查询字符串时要小心,我认为 TABLE_NAME1 是常量,但是在没有先清理用户输入的情况下不要对它执行此操作,否则您将面临 SQL 注入(inject)攻击。

此问题重复

PHP Binding a Wildcard

关于php - sprintf 错误如 %%?%%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24601808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com