通过单个php mysqli_查询函数运行多个查询
我有一个脚本,根据几个因素生成SQL插入或更新脚本。下面是它生成的脚本的字符串值:通过单个php mysqli_查询函数运行多个查询,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个脚本,根据几个因素生成SQL插入或更新脚本。下面是它生成的脚本的字符串值: INSERT INTO AAB_EVENT_SHIFTS ( EVENT_ID ,SHIFT ,START_TIME ,END_TIME ,CREATE_USER ,CREATE_DATE ,MODIFY_USER ,MODIFY_DATE ) VALUES ( 6 ,1 ,STR_TO_DATE('04/01/2016 10:00 am', '%m/%d/%Y %I:%i %p' )
INSERT INTO AAB_EVENT_SHIFTS ( EVENT_ID ,SHIFT ,START_TIME ,END_TIME
,CREATE_USER ,CREATE_DATE ,MODIFY_USER ,MODIFY_DATE ) VALUES ( 6 ,1
,STR_TO_DATE('04/01/2016 10:00 am', '%m/%d/%Y %I:%i %p' )
,STR_TO_DATE('04/01/2016 11:00 am', '%m/%d/%Y %I:%i %p' ) ,14 ,now() ,14 ,now()
); INSERT INTO AAB_EVENT_SHIFTS ( EVENT_ID ,SHIFT ,START_TIME ,END_TIME ,CREATE_USER ,CREATE_DATE ,MODIFY_USER ,MODIFY_DATE ) VALUES ( 6 ,2 ,STR_TO_DATE('04/01/2016 11:00 am', '%m/%d/%Y %I:%i %p' ) ,STR_TO_DATE('04/01/2016 12:00 pm', '%m/%d/%Y %I:%i %p' ) ,14 ,now() ,14 ,now() );
INSERT INTO AAB_EVENT_SHIFTS ( EVENT_ID ,SHIFT ,START_TIME ,END_TIME ,CREATE_USER ,CREATE_DATE ,MODIFY_USER ,MODIFY_DATE ) VALUES ( 6 ,3
,STR_TO_DATE('04/01/2016 12:00 pm', '%m/%d/%Y %I:%i %p' )
,STR_TO_DATE('04/01/2016 1:00 pm', '%m/%d/%Y %I:%i %p' ) ,14 ,now() ,14 ,now() );
如果我在连接到数据库的sql编辑器中运行它,它将运行得非常好,并插入预期的所有行。但是,在如此调用该查询时:
$result = mysqli_query($link,$query);
echo mysqli_error($link);
返回以下内容:
您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,了解在第24行“插入AAB_事件_移位(事件_ID,移位)”附近使用的正确语法
我将查询生成的方式从创建多个查询的串联字符串更改为创建一个查询数组并一次运行一个查询-这似乎纠正了问题
for($i=1;$i<=$event->total_shifts($event_id);$i++) {
// echo $event->shift_exists($event_id,$i).'-'.$i.'::<P>';
if($event->shift_exists($event_id,$i)) {
$query[$i] =
'UPDATE AAB_EVENT_SHIFTS '
. 'SET START_TIME = STR_TO_DATE(\''.$event->event_date($event_id).' '.$_POST['start_shift-'.$i].'\', '.'\'%m/%d/%Y %I:%i %p\' )'
. ', END_TIME = STR_TO_DATE(\''.$event->event_date($event_id).' '.$_POST['end_shift-'.$i].'\', '.'\'%m/%d/%Y %I:%i %p\' )'
. ',MODIFY_USER = '. get_session_user_id(session_id())
. ',MODIFY_DATE = now()'
. ' WHERE EVENT_ID = '.$event_id.' AND SHIFT = '.$i.'; ';
} else { $query[$i] =
'
INSERT INTO AAB_EVENT_SHIFTS
(
EVENT_ID
,SHIFT
,START_TIME
,END_TIME
,CREATE_USER
,CREATE_DATE
,MODIFY_USER
,MODIFY_DATE
)
VALUES
(
'.$event_id.'
,'.$i.'
,STR_TO_DATE(\''.$event->event_date($event_id).' '.$_POST['start_shift-'.$i].'\', '.'\'%m/%d/%Y %I:%i %p\' )
,STR_TO_DATE(\''.$event->event_date($event_id).' '.$_POST['end_shift-'.$i].'\', '.'\'%m/%d/%Y %I:%i %p\' )
,'. get_session_user_id(session_id()) .'
,now()
,'. get_session_user_id(session_id()) .'
,now()
);
';
}
}
$i = 1;
while($query[$i]) {
echo '<P>'.$query[$i];
$result = mysqli_query($link, $query[$i]);
$i++;
echo '<P>'.mysqli_error($link);
}
for($i=1;$itotal\u移位($event\u id);$i++){
//echo$event->shift_存在($event_id,$i)。'-'.$i.:;
如果($event->shift\u存在($event\u id,$i)){
$query[$i]=
“更新AAB_事件_班次”
“将开始时间=STR_设置为日期(\'.$event->event_DATE($event_id)。'.$\u POST['START_shift-'.$i].\','.\'%m/%d/%Y%i:%i%p\')”
“,”结束时间=结束日期(\'.$event->event\u DATE($event\u id)。'.$\u POST['END\u shift-'.$i].\','.\'%m/%d/%Y%i:%i%p\')”
,修改用户='。获取会话用户id(会话id())
,修改日期=现在()
“WHERE EVENT_ID=”.$EVENT_ID.“和SHIFT=”.$i.;”;
}else{$query[$i]=
'
插入AAB_事件_移位
(
事件ID
,班次
,开始时间
,结束时间
,创建用户
,创建日期
,修改用户
,修改日期
)
价值观
(
“.$event_id”
,“.$i.”
,STR_TO_DATE(\'.$event->event_DATE($event_id)。'.$_POST['start_shift-'.$i].''.''.''.\'%m/%d/%Y%i:%i%p\')
,STR_TO_DATE(\'.$event->event_DATE($event_id)。'.$_POST['end_shift-'.$i].\','.\'%m/%d/%Y%i:%i%p\')
,'.get_session_user_id(session_id())。'
,现()
,'.get_session_user_id(session_id())。'
,现()
);
';
}
}
$i=1;
while($query[$i]){
回显“
”.$query[$i];
$result=mysqli_query($link,$query[$i]);
$i++;
echo“
”.mysqli_错误($link);
}
不能通过一个php mysqli\u查询函数运行多个查询。
只需让脚本生成一个查询数组,然后在循环中逐个运行即可。不能通过一个php mysqli_查询函数运行多个查询。
只需让脚本生成一个查询数组,然后在循环中逐个运行即可。如果要使用一个函数执行多个查询,您可以循环查询,也可以使用mysqli\u multi\u查询函数:您可以循环查询,或者如果需要,必须使用mysqli\u multi\u查询函数用一个函数执行多个函数:显示如何创建$query
变量!!添加$query或打印查询并在mysql中运行相同的变量。显示如何创建$query
变量!!添加$query或打印查询并在mysql中运行相同的变量。这正是我所做的,现在正在运行。谢谢,伙计。你可以使用mysqli_multi_query尽管如此?@Jester使用multi_query并不容易这正是我所做的,而且它现在正在工作。谢谢伙计。你可以使用mysqli_multi_query尽管如此?@Jester使用multi_query并不是因为Easya几乎没有人知道mysqli_multi_query是什么以及如何正确使用它,强烈建议不要在愚蠢的情况下使用它类似这样。结果可能会令人惊讶。@YourCommonSense我想是的,我必须说我自己以前没有使用过它,但我认为它可能值得一提。在那种情况下,您会说使用它而不是逐个执行它们更好,还是永远都不执行?当您需要异步查询执行时,我会说。在任何其他情况下,最好这样做分离查询调用。我可以在其他地方使用它,尽管这不是必需的,谢谢你,伙计。因为几乎没有人知道什么是mysqli_multi_查询以及如何正确使用它,所以强烈建议不要在这种愚蠢的情况下使用它。结果可能会令人惊讶。@YourCommonSense我想是的,我必须说我自己没有使用过它以前,但我认为这可能值得一提。在哪种情况下,您会说最好使用它,而不是逐个执行它们,或者永远不执行它们?当您需要异步查询执行时,我会说。在任何其他情况下,最好执行单独的查询调用。我可以在其他地方使用它,尽管这不是必需的,谢谢伙计。