【问题标题】:php sql odbc_execute() with LIKE not working带有LIKE的php sql odbc_execute()不起作用
【发布时间】:2015-04-09 18:07:08
【问题描述】:

所以我有这段代码没有返回任何内容(回显没有返回任何内容,应该返回两行):

<?php

include "connection.php";

$cliente = $_POST["cliente"];

$select = "SELECT CLIENTE, NOMCLI FROM CLIX1 WHERE NOMCLI LIKE ? ORDER BY NOMCLI";

$stmt = odbc_prepare($con, $select);

//preparing the array for parameter
$prep_array = array();

$prep_array[] = "'%$cliente%'";

$rs = odbc_execute($stmt, $prep_array);

$nombres = array();

$clienteIDS = array();

//if prepare statement is successful
if($rs)
{
    $i = 0;

    while($row=odbc_fetch_array($stmt)) 
    {
        $cliente_id = trim($row["CLIENTE"]);

        $nombre = utf8_encode(trim($row["NOMCLI"]));

        $nombres[$i] = $nombre;

        $clienteIDS[$i] = $cliente_id;

        $i++;

    }

    echo json_encode($nombres) . "|" . json_encode($clienteIDS);
}

else
{
    echo "error";
}

odbc_close($con);


?>

我知道问题不在于 odbc_execute() 上的参数传递,因为即使我这样做,它也不会返回任何内容(使用 %mich% 它应该显示两行):

$rs = odbc_execute($stmt, array("%mich%"));

你发现这段代码有什么问题吗?

请提前告诉我,谢谢。

更新 ------

我对以下答案中建议的代码进行了更改,现在我收到了一个新错误:

Warning: odbc_execute(): Can't open file %mich%

其中 mich 是输入以在数据库中搜索的文本。

【问题讨论】:

  • 我不确定您为什么要为数组中的单个项目准备语句。为什么不只做一个 SELECT 查询,例如:$select = "SELECT CLIENTE, NOMCLI FROM CLIX1 WHERE NOMCLI LIKE '%{$_POST['cliente']}%' ORDER BY NOMCLI";
  • 喜欢防止sql注入,我不应该一直在做准备好的语句吗?我应该什么时候做准备好的陈述,什么时候不做?
  • 还有其他方法可以防止 SQL 注入。 MySQL 示例:$select = sprintf("SELECT CLIENTE, NOMCLI FROM CLIX1 WHERE NOMCLI LIKE '%%%s%%' ORDER BY NOMCLI", mysql_real_escape_string($_POST['cliente'], $con));
  • 也许你也可以帮我找到 SQL Server 的方法。如果我想使用准备好的语句,我也想知道为什么我的代码不起作用
  • 如果您启用了 MySQL 日志 [linl]dev.mysql.com/doc/refman/5.1/en/server-logs.html,您应该能够看到您的查询是否按预期执行。我会从那里开始。

标签: php sql-server odbc prepared-statement


【解决方案1】:

我发现以下可能相关:ODBC prepared statements in PHP

$prep_array = array();
$prep_array[] = "'%$cliente%'";
$rs = odbc_execute($stmt, $prep_array);

我认为双引号可能会导致问题。

【讨论】:

  • 谢谢。我会检查一下,如果它有效,我一定会让你知道
  • 很确定我说双引号是上述 cmets 中的问题。不过这很酷,您可以为此赞叹:)
  • @Namrehs 你绝对做到了。如果您对此有强烈的感觉,请发布答案,让 OP 给予您应得的荣誉。
  • 如果这是问题所在,我现在将检查它,如果它是正确的,我将给予两者的信任
  • 它现在给我以下错误:警告:odbc_execute(): 无法打开文件 %mich%
猜你喜欢
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 2013-02-03
  • 1970-01-01
相关资源
最近更新 更多