php - Mysqli参数绑定(bind)问题

标签 php mysql mysqli sql-like parameterbinding

<分区>

我需要多一双眼睛来关注这个。任何帮助将不胜感激。这是一个非常简单的搜索查询,但无论出于何种原因,我都找不到错误。好吧,我知道错误在哪里。我就是无法克服它。不管怎样……

我从 POST 变量中获取搜索值,设置该变量,然后按如下方式设置列变量...

$term = "'%".$_POST['searchTerm']."%'";
$field = "columnName";

当我回应这些时,它们完美地出现了。因此,如果我在表单中键入“a”,我将回显“%a%”和 columnName。

然后我准备查询并按如下方式绑定(bind)参数...

$suquery=$dbCon->prepare("select * from Table where ? LIKE ?");
$suquery->bind_param('ss', $field, $term);
$suquery->execute();

结果总是返回 0 行。当我玩这个时,我发现两个绑定(bind)参数都没有正常工作,即使它按应有的方式回显。例如,当我更改查询以便对列进行硬编码并且仅绑定(bind)搜索词时......

$suquery=$dbCon->prepare("select * from Table where columnName LIKE ?");
$suquery->bind_param('s', $term);
$suquery->execute();

我仍然得到零返回行。这告诉我即使 $field 回显为 '%a%' 某些东西仍然关闭。我真的很茫然。同样,当我硬连接搜索词并绑定(bind)列时......

$suquery=$dbCon->prepare("select * from Table where ? LIKE '%a%'");
$suquery->bind_param('s', $field);
$suquery->execute();

我返回的行太多了。它实际上是从表中提取行,其中任何列中的值都包含字母“a”。因此,列或术语都没有正确绑定(bind)。五月天!

最佳答案

$suquery=$dbCon->prepare("select * from Table where ? LIKE ?");

不会按预期工作。它将被翻译为:

SELECT * from table WHERE 'columnName' LIKE '%a%'

它返回所有行,因为“columnName”包含一个“a”。 'columnName' 是一个字符串,而不是实际的列名。

你的第二次尝试是正确的,除了你在术语中有一个额外的引号。使用参数时,不需要任何引号。解决方案是:

$term = "%".$_POST['searchTerm']."%";
$suquery=$dbCon->prepare("select * from Table where columnName LIKE ?");
$suquery->bind_param('s', $term);
$suquery->execute();

关于php - Mysqli参数绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504192/

相关文章:

php - MySQL触发器无法调用

Mysql:比较和过滤时间条目

python - Django 部署。加载 MySQLdb 模块时出错。从/tmp 目录读取/写入时出现问题

php - 将CSS应用于从数据库中获取的数据

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 在 PHP 中,我应该使用今天的日期函数还是 MySQL 中的 curdate()?

php - 打印数据库中的所有表

java - Facebook 应用程序 - 如何在用户的墙上帖子上发布动态内容

php - PHP 脚本未添加 MySQL 数据

php - 使用 jQuery 显示 POST 数据?