SQL 函数调用中的 PHP 参数错误

Posted

技术标签:

【中文标题】SQL 函数调用中的 PHP 参数错误【英文标题】:Error with PHP parameters in SQL function call 【发布时间】:2019-06-18 20:17:15 【问题描述】:

我在一个类中有两个 php 变量是整数($id 和 $descCode)。

我正在尝试将这些作为字符放入我的 SQL 函数调用中(数据库正在寻找这些分别为 CHAR 2CHAR 10)。

由于某种原因,这会触发错误:

使用参数标记或 NULL 无效

我到底做错了什么?

$results = array();
$results = $db->select("SELECT newCodeTest(:id,:desc) as newCode FROM testTable",
    [
        'id' => (string)$id,
        'desc' => (string)$descCode
    ]
);

【问题讨论】:

什么是newCodeTest()?你从哪里得到这个标记?从来没有见过这样的东西。 这是我使用 select 调用的 SQL 函数,我们就是这样设置的 函数有什么作用? SELECT 语句一般打算做什么? 我想我实际上用演员表和具体数字修复了它 【参考方案1】:

您不能以这种方式使用 PDO。

看看这个(可能重复):Can PHP PDO Statements accept the table or column name as parameter?。

将这些值设置为基本字符串

$id = $pdo->quote($id);
$desc = $pdo->quote($desc);
"SELECT newCodeTest($id,$desc) as newCode FROM testTable"

关于报价的信息:

https://www.php.net/manual/en/pdo.quote.php

关于性能的有趣信息

https://www.php.net/manual/en/pdo.quote.php#122967

【讨论】:

我不认为 OP 使用参数来选择表名或列名。查询不会只选择一个字符串文字,还是实际上是由newCodeTest() 函数处理的两个字符串文字? 我想 newCodeTest(param1, param2) 是他自己的 mysql 函数,需要 2 个参数。因此我不理解downvote。 我没有投反对票,但这里的表名或列名似乎不相关。 我假设反对票(也不是我的)是因为您在回答一个您没有足够详细信息可以回答的问题时采取了疯狂的尝试。 标记 (:id, :desc) 存在问题,不允许使用这种方式。例如,它们可以用于 where 条件,作为插入或更新数据的边界,但不能作为自身函数中的参数。

以上是关于SQL 函数调用中的 PHP 参数错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL 存储过程编译错误:调用中的参数数量或类型错误

PLS-00306:函数调用中的参数数量或类型错误

如果未提供 URL 中的参数,则 codeigniter 显示警告错误

STL容器作为函数中的模板参数,调用错误

PHP中SQL查询中的多个参数

调用中的参数数量或类型错误