php sprintf 替换多个,php - 如何更换里面的sprintf多个%S在DATE_FORMAT? - SO中文参考 - www.soinside.com...

这篇博客讨论了在PHP中如何处理一个复杂的SQL查询,涉及到DATE_FORMAT函数和多个日期参数。作者遇到了在使用sprintf函数替换查询中的日期字符串时出现错误的问题。解决方案包括改进代码的可读性,使用编号占位符以及考虑切换到预处理语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何更换里面的sprintf多个%S在DATE_FORMAT?

问题描述 投票:0回答:1

我试图与给定天全部更换%s查询。但它抛出我错在Date_format.在%s的fcst_date是越来越正确更换。请帮忙

$day1 = date('Y-m-d');

$day2 = date('Y-m-d', strtotime("+1 days"));

$day3 = date('Y-m-d', strtotime("+2 days"));

$day4 = date('Y-m-d', strtotime("+3 days"));

$day5 = date('Y-m-d', strtotime("+4 days"));

$day6 = date('Y-m-d', strtotime("+5 days"));

$day7 = date('Y-m-d', strtotime("+6 days"));

$day8 = date('Y-m-d', strtotime("+7 days"));

$day9 = date('Y-m-d', strtotime("+8 days"));

$day10 = date('Y-m-d', strtotime("+9 days"));

$query = sprintf('SELECT blk_id,blk_name,fcst_date,temp_max,max_temp,date,temp_stn_block.stn_id FROM temp_stn_block RIGHT JOIN temp_stn_normals ON temp_stn_block.stn_id=temp_stn_normals.stn_id INNER JOIN block_imd_gfs_forecast ON blk_id=block_id JOIN block_s ON block_s.id=blk_id WHERE DATE_FORMAT(date, "%%m-%%d") IN DATE_FORMAT("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s", "%%m-%%d") AND fcst_date IN (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", $day1, $day2, $day3, $day4,$day5, $day6, $day7,$day8,$day9,$day10, $day1, $day2, $day3, $day4,$day5, $day6, $day7,$day8,$day9,$day10);

$res = $this->db->query($query);

return $res->result();

php

mysql

codeigniter

1个回答

0

投票

我宁愿使用一个名为PARAM准备好的发言这只是一个更可读的代码。但是,那么你就必须更新你的CodeIgniter数据库配置使用PDO的驱动程序。

对于sprintf,只用编号占位符:

$qry_str = 'SELECT

blk_id,blk_name,fcst_date,temp_max,max_temp,date,temp_stn_block.stn_id

FROM temp_stn_block

RIGHT JOIN temp_stn_normals

ON temp_stn_block.stn_id=temp_stn_normals.stn_id

INNER JOIN block_imd_gfs_forecast

ON blk_id=block_id JOIN block_s ON block_s.id=blk_id

WHERE

DATE_FORMAT(date, "%%m-%%d") BETWEEN *day1* AND *day10*

AND

fcst_date IN (%1$s, %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s, %10$s)"

';

$query = sprintf($qry_str, $day1, $day2, $day3, $day4, $day5, $day6, $day7, $day8, $day9, $day10);

$res = $this->db->query($query);

我想与您的查询的问题是%s的使用是一个说明符“秒”在DATE_FORMAT

热门问题

好的,我会为您解答。 首先,我们需要在代码中添加对按键的识别和处理。您可以使用STM32的HAL库中的GPIO功能来实现。具体来说,您需要定义四个按键的GPIO引脚和按键状态变量,并在while循环中不断地读取按键状态,根据按键状态来调节时间。下面是一份示例代码: ``` #include "main.h" #include "stdio.h" /* Define GPIO pins for buttons */ #define BUTTON1_Pin GPIO_PIN_0 #define BUTTON1_GPIO_Port GPIOA #define BUTTON2_Pin GPIO_PIN_1 #define BUTTON2_GPIO_Port GPIOA #define BUTTON3_Pin GPIO_PIN_2 #define BUTTON3_GPIO_Port GPIOA #define BUTTON4_Pin GPIO_PIN_3 #define BUTTON4_GPIO_Port GPIOA /* Define variables for button states */ uint8_t button1_state = 0; uint8_t button2_state = 0; uint8_t button3_state = 0; uint8_t button4_state = 0; /* Function to handle button press */ void handle_button_press(uint8_t button_number) { /* TODO: Implement time adjustment logic here */ } int main(void) { /* Initialize HAL library */ HAL_Init(); /* Initialize RTC */ /* TODO: Add RTC initialization code here */ /* Initialize GPIO pins for buttons */ __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = BUTTON1_Pin | BUTTON2_Pin | BUTTON3_Pin | BUTTON4_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* Main loop */ while (1) { /* Read button states */ button1_state = HAL_GPIO_ReadPin(BUTTON1_GPIO_Port, BUTTON1_Pin); button2_state = HAL_GPIO_ReadPin(BUTTON2_GPIO_Port, BUTTON2_Pin); button3_state = HAL_GPIO_ReadPin(BUTTON3_GPIO_Port, BUTTON3_Pin); button4_state = HAL_GPIO_ReadPin(BUTTON4_GPIO_Port, BUTTON4_Pin); /* Handle button presses */ if (button1_state == GPIO_PIN_RESET) { handle_button_press(1); } if (button2_state == GPIO_PIN_RESET) { handle_button_press(2); } if (button3_state == GPIO_PIN_RESET) { handle_button_press(3); } if (button4_state == GPIO_PIN_RESET) { handle_button_press(4); } /* Toggle LED */ HAL_GPIO_TogglePin(GPIOF, LED_Pin); /* Update time and date on LCD */ HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN); sprintf(time_str, "%02d:%02d:%02d", sTime.Hours, sTime.Minutes, sTime.Seconds); sprintf(date_str, "20%02d-%02d-%02d %d", sDate.Year, sDate.Month, sDate.Date, sDate.WeekDay); LCD_ShowString(10, 30, tftlcd_data.width, tftlcd_data.height, 24, date_str); LCD_ShowString(10, 60, tftlcd_data.width, tftlcd_data.height, 24, time_str); /* Delay for 500ms */ delay_ms(500); } } ``` 在上面的代码中,我们定义了四个按键的GPIO引脚和按键状态变量。在while循环中,我们不断地读取按键状态,并调用handle_button_press函数来处理按键事件。在handle_button_press函数中,您需要实现时间调节逻辑。例如,如果用户按下第一个按键,则您可以递增当前时间的小时数,等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值