试图转换为mysqli a“;插入并更新";查询

试图转换为mysqli a“;插入并更新";查询,mysql,mysqli,insert-update,Mysql,Mysqli,Insert Update,我有一个mysql语句,在同一个查询中使用插入和更新: if(mysql_query('insert into forum_topics (parent, id, id2, title, message, authorid, timestamp, timestamp2) select "'.$dn1['parent'].'", "'.$id.'", max(id2)+1, "", "'.$message.'", "'.$_SESSION['SESS_MEMBER_ID'].'", "'.time

我有一个mysql语句,在同一个查询中使用插入和更新:

if(mysql_query('insert into forum_topics (parent, id, id2, title, message, authorid, timestamp, timestamp2) select "'.$dn1['parent'].'", "'.$id.'", max(id2)+1, "", "'.$message.'", "'.$_SESSION['SESS_MEMBER_ID'].'", "'.time().'", "'.time().'" from forum_topics where id="'.$id.'"') and mysqli_query('update forum_topics set timestamp2="'.time().'" where id="'.$id.'" and id2=1'))
我试图通过以下方式将其转换为mysqli:

$qry = 'insert into forum_topics (parent, id, id2, title, message, authorid, timestamp, timestamp2) select "'.$dn1['parent'].'", "'.$id.'", max(id2)+1, "", "'.$message.'", "'.$_SESSION['SESS_MEMBER_ID'].'", "'.time().'", "'.time().'" from forum_topics where id="'.$id.'"';
$qry2 = 'update forum_topics set timestamp2="'.time().'" where id="'.$id.'" and id2=1';
$dn3 = $link -> query($qry AND $qry2);

if (!$dn3)...
不幸的是,它似乎不起作用,因为我被抛出了这个错误:

错误:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“1”附近使用的正确语法

有谁能帮上忙吗


如果要遵循原始逻辑,则

$dn3 = ($link -> query($qry) AND $link->query($qry2));
由于php代码中的逻辑and运算符,这两个查询字符串在提交到mysql之前是在布尔操作中解释的


结果,值1(true)被发送到mysql,这显然导致了语法错误消息。

不要使用字符串连接,使用预处理语句。预处理语句不是为了防止sql注入,而是为了使用不同的参数有效地重复执行同一条语句。即使使用了字符串连接,您也可以阻止sql注入。@Shadow:实际上,它们也是为了防止注入而设计的。这是一个副作用,不是有意的决定。如果不重复发出相同的语句,那么使用准备好的语句将降低代码的效率。由于mysql限制了内存中已准备语句的数量,不负责任的使用可能会导致很快达到该限制,特别是在免费共享托管环境中。问题不在于查询,这是问题中发出2个查询的方式导致了问题。String_variable1和String_variable2表达式将产生1(true),这就是错误消息中的内容。所以,我会撤销-1尤尔根。遗憾的是,有时评论不能被否决……错误消息来自DB。所以这里的查询是错误的。这里的错误必须被修复,而不是在PHP代码中。谢谢你,这正是我所需要的,因此它现在可以工作了。是的,我可以使用预先准备好的语句,但因为我不是一个编码大师,我更喜欢转换为尽可能简单的:)+1shadow@juergend对不起,伙计,你根本不知道你在说什么!由于php代码中的逻辑and运算符,这两个查询字符串在提交到mysql之前是在布尔操作中解释的。结果,值1(true)被发送到mysql,这显然导致问题中显示的语法错误消息。