php - PDO异常 : Invalid parameter number with message 'SQLSTATE[HY093]: Columns/Parameters are 1-based'

标签 php mysql

这个项目真的很难。我正在尝试访问具有各种字段的数据库,每个字段都有一个唯一的变量;但我仍然得到“列是基于 1 的”

堆栈跟踪

Notice: exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: Columns/Parameters are 1-based' in C:\wamp\www\CTEC3110\includes\classes\cw_framework\class.CourseWorkDatabaseWrapper.php:80
Stack trace:
#0 C:\wamp\www\CTEC3110\includes\classes\cw_framework\class.CourseWorkDatabaseWrapper.php(80): PDOStatement->bindParam(0, '447950491677', 2)
#1 C:\wamp\www\CTEC3110\includes\classes\cw_download_message_data\class.CourseWorkDownloadMessageDataModel.php(357): CourseWorkDatabaseWrapper->safe_query('SELECT id FROM ...', Array)
#2 C:\wamp\www\CTEC3110\includes\classes\cw_download_message_data\class.CourseWorkDownloadMessageDataModel.php(181): CourseWorkDownloadMessageDataModel->do_check_if_data_exists()
#3 C:\wamp\www\CTEC3110\includes\classes\cw_framework\class.CourseWorkContainer.php(142): CourseWorkDownloadMessageDataModel->do_store_downloaded_message_data()
#4 C:\wamp\www\CTEC3110\includes\classes\cw_download_message_data\class.CourseWorkDownloadMessageDataController.php(15): CourseWorkContaine in C:\wamp\www\CTEC3110\includes\classes\cw_framework\class.CourseWorkDatabaseWrapper.php on line 102


$this->c_obj_stmt = $this->c_obj_database_handle->prepare($m_query_string);

// bind the parameters
if (sizeof($m_arr_query_parameters) > 0)
{
    foreach ($m_arr_query_parameters as $m_param_keys)
    {
        var_dump($m_param_keys);

        foreach ($m_param_keys as $m_param_key => $m_param_value)
        {
            $this->c_obj_stmt->bindParam($m_param_key, $m_param_value, PDO::PARAM_STR);
        }
    }
}

// execute the query
$m_execute_result = $this->c_obj_stmt->execute();
$this->c_arr_database_connection_messages['execute-OK'] = $m_execute_result;
$m_database_query_execute_error = false;

其中“$m_query_string”是:

SELECT id
FROM cw_messages
WHERE source = :source_terminal
    AND destination = :destination_terminal
    AND date = :message_date
    AND time = :message_time
    AND type = :message_type
    AND reference = :message_reference
    AND data = :message_data
LIMIT 1

这里是“$m_arr_query_parameters”:

Array ( [:source_terminal] => Array ( [0] => 447950491677 [1] => 447950491677 ) [:destination_terminal] => Array ( [0] => 447817814149 [1] => 447817814149 ) [:message_date] => Array ( [0] => 14/08/2014 [1] => 14/08/2014 [2] => 2014-08-14 [3] => 2014-08-14 ) [:message_time] => Array ( [0] => 18:57:31 [1] => 19:48:28 ) [:message_type] => Array ( [0] => SMS [1] => SMS ) [:message_reference] => Array ( [0] => 0 [1] => 0 ) [:message_data] => Array ( [0] => Test 3 [1] => Test at 20:48 ) ) 

这是 $m_param_keys 的 var 转储:

array (size=2) 0 => string '447950491677' (length=12) 1 => string '447950491677' (length=12)

最佳答案

您的转储显示 $m_param_keys 是一个数字键控数组。你实际上是在尝试做

->bindParam(0, 447950491677)

PDO 参数从 1 开始编号,而不是从 0 开始。而且您还使用了 NAMED 参数,因此也不允许通过数字偏移量进行绑定(bind)。绑定(bind)调用应该是

->bindParam(':source_terminal', $m_message_source)

关于php - PDO异常 : Invalid parameter number with message 'SQLSTATE[HY093]: Columns/Parameters are 1-based' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327213/

相关文章:

php - 删除表列

php - 错误 : Undefined index - PHP, MySql

php - wordpress menu_order 不起作用

php - 使用 php mysql Ajax 使用弹出表单将数据插入数据库

php - 需要数据库结构建议

php - 友谊系统SQL结构与查询

php - 如何从已返回模板的库函数中获取变量以在 PHP/Codeigniter 中查看

MySQL 只返回最后的日期/时间记录

mysql - 如何从同一查询中的另一列中选择数据?

mysql - 选择最新的作为分组依据(或其他解决方案......)的一部分