在php中为MySQL数据库使用MERGE-INTO语句时出现问题

在php中为MySQL数据库使用MERGE-INTO语句时出现问题,php,mysql,database,merge,Php,Mysql,Database,Merge,我试图在php文件中使用MERGE-INTO语句来更新或插入多人游戏的MySQL数据库 以下是我试图实现的目标的完整描述: 通过javascript文件中的以下行调用php文件: xmlhttp.open('GET',“phpsqlajax_genxml.php?”+“lat=“+lla[0]”和heading=“+truckHeading+”&lng=“+lla[1]+”&velocity0=“+vel0+”&velocity1=“+vel1+”&velocity2=“+vel2+”&id=“

我试图在php文件中使用MERGE-INTO语句来更新或插入多人游戏的MySQL数据库

以下是我试图实现的目标的完整描述:

通过javascript文件中的以下行调用php文件:

xmlhttp.open('GET',“phpsqlajax_genxml.php?”+“lat=“+lla[0]”和heading=“+truckHeading+”&lng=“+lla[1]+”&velocity0=“+vel0+”&velocity1=“+vel1+”&velocity2=“+vel2+”&id=“+playerNumber,true”)

这将发送php文件信息以更新数据库。这将是一个新玩家,并且第一次发送此信息,这意味着将在数据库中创建一个新行,或者是一个只需要更新其信息的当前玩家

如果是新玩家,则发送的“id”将是数据库中尚不存在的id

由于某些原因,数据库没有更新,也没有添加新行。我认为这是一个语法错误,因为我没有太多使用合并语句的经验。有这方面经验的人能告诉我我可能做错了什么吗

以下是MERGE INTO语句之前的代码,以便您了解哪些变量是:

 $id = $_GET['id'];

 $lat = $_GET['lat'];

 $lng = $_GET['lng'];

 $heading = $_GET['heading'];

 $velocity0 = $_GET['velocity0'];

 $velocity1 = $_GET['velocity1'];

 $velocity2 = $_GET['velocity2'];
id是列标题,$id是传入的id

以下是我当前在php文件中的MERGE-INTO语句:

  MERGE INTO markers USING id ON (id = $id)
  WHEN MATCHED THEN
  UPDATE SET lat = $lat, lng = $lng, heading = $heading, velocityX = $velocity0, velocityY = $velocity1, velocityZ = $velocity2
  WHEN NOT MATCHED THEN
  INSERT (id, name, address, lat, lng, type, heading, velocityX, velocityY, velocityZ)       VALUES ($id, 'bob', 'Poop Lane', $lat, $lng, 'Poop', $heading, $velocity0, $velocity1, $velocity2)

如果在调用过程中出现任何失败,PHP的数据库库总是让它们的各种函数调用返回FALSE。假设您使用的是mysql\u/mysqli\u,那么您应该这样做:

$sql = "MERGE INTO ....";
$result = mysql_query($sql);
if ($result === FALSE) {
    die(mysql_error());
}
不检查数据库调用的返回值是很糟糕的做法。即使查询字符串在语法上是100%有效的,查询失败的方法也太多了。假设一切正常是让自己陷入非常糟糕的境地的最简单方法。同样,当事情确实失败时,缺少错误处理只会隐藏错误的实际原因,然后你最终会得到这样的答案


哦,在我忘记之前。。。MySQL不支持“合并到…”,所以整个查询都是语法错误。请改为使用“…”或“插入…更新…”。

PHP的数据库库在调用过程中如果出现任何失败,则其各种函数调用都会返回FALSE。假设您使用的是mysql\u/mysqli\u,那么您应该这样做:

$sql = "MERGE INTO ....";
$result = mysql_query($sql);
if ($result === FALSE) {
    die(mysql_error());
}
不检查数据库调用的返回值是很糟糕的做法。即使查询字符串在语法上是100%有效的,查询失败的方法也太多了。假设一切正常是让自己陷入非常糟糕的境地的最简单方法。同样,当事情确实失败时,缺少错误处理只会隐藏错误的实际原因,然后你最终会得到这样的答案


哦,在我忘记之前。。。MySQL不支持“合并到…”,所以整个查询都是语法错误。请改为使用“…”或“插入…更新…”。

那么,如果$result=FALSE,在这种情况下会发生什么,我的游戏会不会停止运行并显示错误消息?我将在哪里看到错误消息。您可以在hobbit2movie.com上查看我的游戏,具体取决于数据库调用的作用。未能获得高分是令人恼火的,但不是致命的。如果不记录你在4个多小时的战斗后打败了X老板,可能会导致你的房子被炒鱿鱼。错误处理由您决定,但盲目地假设成功肯定不是正确的选择。那么,如果$result=FALSE,在这种情况下会发生什么,我的游戏会不会停止运行,并显示错误消息?我将在哪里看到错误消息。您可以在hobbit2movie.com上查看我的游戏,具体取决于数据库调用的作用。未能获得高分是令人恼火的,但不是致命的。如果不记录你在4个多小时的战斗后打败了X老板,可能会导致你的房子被炒鱿鱼。错误处理由您决定,但盲目地假设成功绝对不是一条路。