我正在编写一些SQL,并使用AdoDb连接到我的数据库并运行查询等等。我正在使用参数化查询,并且遇到了麻烦。
它们是将值的数组传递给AdoDb / MySql中的in_clause进行参数化的一种方法。
我的问题是,如果我将准备好的字符串作为参数传递,即 ‘test’,’test2’,’test3’,
则它不起作用,因为库或数据库会自动对其进行转义并在开头和结尾处添加外部引号,因此所有内部引号随后会自动转义,因此查询不返回任何内容,因为它查找的是
‘'test ','test2 ','test3 '‘ ,而不是我输入的内容。
更新了另一种可能的方法来完成此操作
<?php
$in_clause = implode(",", $first_names);
$query = "
SELECT
mytable_id_pk
FROM
mytable
WHERE
FIND_IN_SET(mytable_fname," . $DB->Param('first_names') . ")"
$stmt = $DB->Prepare($query);
$result = $DB->Execute($stmt,array($in_clause));
?>
我会以这种方式进行操作(因为我搜索了一段时间,而Google却没有任何用处):
$count = count($first_names);
$in_params = trim(str_repeat('?, ', $count), ', ');
$query = "
SELECT
mytable_id_pk
FROM
mytable
WHERE
mytable_fname IN ({$in_params});";
$stmt = $DB->Prepare($query);
$result = $DB->Execute($stmt, $first_names);
这应该做的…
问题内容: 假设我们有一个查询: 以及要获取的ID数组: 预处理语句它劝准备一个语句,并调用它多次: 但是现在我必须手动对结果进行排序。我有其他不错的选择吗? 问题答案: 您可以这样进行: 使用此方法,您将为每个id调用bind_param,并且已由mysql完成排序。
问题内容: 我正在自定义由hibernate生成的插入SQL,并遇到了问题。当Hibernate自己生成查询时,它将数据插入表的前两列,但这会导致数据库错误,因为表的所有四列都是不可为空的。为了正确执行插入,它必须将相同的数据插入到新记录的两列中。这意味着我需要Hibernate将相同的数据绑定到我正在编写的查询(准备好的语句)中的两个不同的参数上。 是否有一些SQL语法可让我以与绑定到绑定语句不
我准备了以下语句,通过JDBC驱动程序将其发送到Oracle数据库: 但是,我希望使用相同的准备好的语句,通过提供通配符参数这样的东西来获取表中的所有行。我尝试了“*”和“”这样的字符串,但它总是不返回行。 是否存在用于获取所有行的此准备语句中的参数的值?
问题内容: 我的目的是在表中找到与存储在String中的集合匹配的所有项目: 这似乎并不完美,它总是向我发出以下警告: 如果我有一个参数,这将是显而易见的: 但是由于我不得不处理这个问题,这对我来说有点复杂。 问题答案: Prepared语句没有参数,因为您在准备列表之前已将列表插入到该语句中。 至此,您创建的SQL语句为: 由于该语句没有参数,因此失败。而不是将项目插值到语句(容易注入)中,而是
我有一个作业必须使用不同的作业参数运行多次。我想设置一个JdbcCursorItemReader来执行对作业的查询,itemReader配置如下: 作业配置如下: 但我得到了这个错误: 我发现了一个非常相似的问题,这个问题和这个问题的区别是,我没有reader类来注释,我只有xml条目,因为我希望避免创建自己的ItemReader。(我可以尝试重写jdbcCursorItemReader类,以便能
问题内容: 我在程序中尝试了准备好的语句,但是没有用。 注释的部分是“准备报表”部分。当我将其更改为常规语句时,一切都正确。 有人可以告诉我我想念什么吗? 非常感谢。 问题答案: 尝试从查询中删除并在添加参数后使用: