【发布时间】:2014-10-02 02:07:05
【问题描述】:
我的问题是我正在尝试连接到我的数据库(它有 4 个元素,ID、日期、时间和最后一个值(last_value))但是因为我打算将我的数据放入数据库中“ message_id”元素为空。谁能帮帮我?
堆栈跟踪
'PDOException':带有消息的无效参数号 'SQLSTATE[HY093]: 绑定变量的数量与 代币 C:\wamp\www\CTEC3110\includes\classes\cw_framework\class.CourseWorkDatabaseWrapper.php:78 堆栈跟踪:#0 C:\wamp\www\CTEC3110\includes\classes\cw_framework\class.CourseWorkDatabaseWrapper.php(78): PDOStatement->execute() #1 C:\wamp\www\CTEC3110\includes\classes\cw_download_message_data\class.CourseWorkDownloadMessageDataModel.php(216): CourseWorkDatabaseWrapper->safe_query('SELECT message_...', Array) #2 C:\wamp\www\CTEC3110\includes\classes\cw_download_message_data\class.CourseWorkDownloadMessageDataModel.php(169): CourseWorkDownloadMessageDataModel->do_check_if_data_exists() #3 C:\wamp\www\CTEC3110\includes\classes\cw_framework\class.CourseWorkContainer.php(126): CourseWorkDownloadMessageDataModel->do_store_downloaded_message_data() #4 C:\wamp\www\CTEC3110\includes\classes\cw_download_message_data\class.CourseWorkDownloadMessageDataController.php(6): 课程工作继续 C:\wamp\www\CTEC3110\includes\classes\cw_framework\class.CourseWorkDatabaseWrapper.php 在第 91 行
检查数据是否存在代码
$m_message_id = NULL;
$m_message_date = $this->c_arr_download_message_data['message-date'];
$m_message_time = $this->c_arr_download_message_data['message-time'];
$m_message_last_value = $this->c_arr_download_message_data['message-data'];
$m_sql_query_string = CourseWorkSqlQuery::does_message_exist();
$m_arr_sql_query_parameters =
array( ':message_id' => $m_message_id,
':message_date' => $m_message_date,
':message_time' => $m_message_time,
':message_last_value' => $m_message_last_value);
$this->c_obj_database_handle->safe_query($m_sql_query_string, $m_arr_sql_query_parameters);
SQL 查询
public static function does_message_exist()
{
$m_sql_query_string = "SELECT message_id, message_time, message_date, message_last_value ";
$m_sql_query_string .= "FROM cw_messages ";
$m_sql_query_string .= "WHERE message_id = :message_id ";
$m_sql_query_string .= "AND message_time = :message_time ";
$m_sql_query_string .= "AND message_date = :message_date ";
$m_sql_query_string .= "AND message_last_value = :message_last_value ";
$m_sql_query_string .= "LIMIT 1";
return $m_sql_query_string;
}
查询检查代码(在 try/catch 下)
$m_temp = array();
$this->c_obj_database_handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$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_key => $m_param_value)
{
$m_temp[$m_param_key] = $m_param_value;
$this->c_obj_stmt->bindParam($m_param_key+1, $m_temp[$m_param_key], 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;
【问题讨论】:
-
@hjpotter92 不相关,抱歉。并不是说我要使用 PDO 插入空值;这是我正在尝试根据我的数据库中已有的值来测试我得到的数据。
-
@meda 他建议这可能是另一个问题的重复,但无论如何我都会尝试并回到这个问题。编辑:没有运气。即使使用您的建议仍会返回相同的错误和堆栈跟踪。 $this->c_obj_stmt->bindValue($m_param_key+1, $m_param_value, PDO::PARAM_STR);
-
@Raisus 在下面看到我的回答
-
@meda 做到了。感谢您的帮助:D