【问题标题】:MySql LIKE query in a form表单中的 MySql LIKE 查询
【发布时间】:2021-05-08 23:25:53
【问题描述】:

所以,我有这个查询:

FROM test.cliente, test.contratto
WHERE test.contratto.Codice_Cliente = test.cliente.Codice_Cliente
AND test.cliente.Denominazione = :name;

但我正在尝试使用这样的东西:

FROM test.cliente, test.contratto
WHERE test.contratto.Codice_Cliente = test.cliente.Codice_Cliente<
AND test.cliente.Denominazione LIKE "%:name%";

我想使用这个查询的原因是因为用户在 html 表单中输入了一个名字,但我不希望他输入我在数据库中的相同数据,因为没有办法知道什么他将键入的数据将与写入数据库中的数据相同。


代码如下:

$name = $_POST['Denominazione'];
            $statement = $connection->prepare($sql);
            $statement->bindParam(':name', $name, PDO::PARAM_STR);
            $statement->execute();
        $result = $statement->fetchAll();

我也尝试过输入

$name = '%'.$_POST['Codice_Cliente'].'%';

但它什么也没找到。

【问题讨论】:

  • 您的第二种方法是正确的(请参阅PDO prepared statement with LIKE)。如果它没有找到任何东西,那么它不匹配任何行。你确定你的查询应该匹配吗?
  • $_POST['Denominazione'] != $_POST['Codice_Cliente']
  • 您的查询中缺少 SELECT?还是您只发布了查询的一部分。
  • 我的意思是没有选择吗?在您的查询中?
  • 我不知道为什么,但是 [...] 丢失了,这些只是我查询的一部分

标签: php html mysql sql


【解决方案1】:

PDO 准备好的语句不允许在 SQL 语句中使用 %。

You have to use "FROM test.cliente, test.contratto
WHERE test.contratto.Codice_Cliente = test.cliente.Codice_Cliente
AND test.cliente.Denominazione LIKE :name";

并将“%name%”放入执行中。

另请参阅:

How do I create a PDO parameterized query with a LIKE statement?

PHP - Using PDO with IN clause array

【讨论】:

  • 但这如何适用于我的情况?我想知道我应该把“%”放在 $name 的什么位置,就像在执行()函数之前我有 bindParam(':name', $name, PDO::PARAM_STR);
  • 是否有令人信服的理由使用 bindParam? IMO 传递要执行的值比在 bindParam 中传递引用要容易得多。所见即所得的执行。
  • 我使用它是因为这是我知道的唯一方法。你能提供一个解决方案吗?
  • 您的“也试过”的版本是正确的。如果你没有得到结果,那么还有其他问题。请尝试使用 PHPMyAdmin 查询,看看查询是否有问题。
  • 我试过了,查询不是问题。如果我键入数据库中的确切名称,它会显示查询结果。但是,如果我从末尾剪掉 2 个字母,它不会显示结果。
猜你喜欢
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2019-01-04
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多