PHP 代码在我的提供商更新 SQL 版本后不再工作?

PHP code doesn't work anymore after SQL version update by my provider?

我有一个 http 桥,用于在“第二人生”应用程序和数据库之间交换信息。它工作正常,但最近在我的提供商将我的数据库的 SQL 版本更改为 5.5.38 后停止了。这是我的旧 php 脚本的示例:

<?php
$con=mysqli_connect("DB_HOSTNAME","DB_USERNAME","DB_PASSWORD", "DB_DATABASE");

if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$PKey = mysqli_real_escape_string($con, $_GET['playerKey']);
$HKey = mysqli_real_escape_string($con, $_GET['hudKey']);  

echo $HKey, " and " , $PKey;

$sql="INSERT INTO test (HKey, PKey)
VALUES ('$HKey', '$PKey')";

echo $sql . '<br/>'; 

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?> 

我收到以下错误消息:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-get (HKey, PKey) VALUES ('XXXXXXX-fe56-XXXX-4bea-XXXXXXXXX', 'XXXXXX' at line 1

我尝试使用我在 Stack Overflow 的 post 中找到的这个插入语句:

$stmt = $mysqli->prepare("INSERT INTO test (HKey, PKey) VALUES (?, ?)");
$stmt->bind_param("ss", $HKey, $PKey);
$stmt->execute();

但是当我插入那行代码时,它也不起作用,我根本没有收到任何错误消息。

right syntax to use near '-get (HKey, PKey)

您 post 编辑 vvv 的内容 不会 抛出该错误。

INSERT INTO test (HKey, PKey)

"Hi Fred, you are really good at guessing. my table name does contain a hyphen."

您的 table 名称包含连字符。 (而且我不是在猜测,错误告诉我

我怎么知道的?

  • 很清楚。你有HKey和PKey的列名,看到错误中列名前的-get posted.

  • 语法:INSERT INTO table (column_1, column_2) VALUES ('value_1', 'value_2')

  • table = 你的 table-get,column_1 = 你的 HKey,column_2 = 你的 PKey

例如,如果您的 table 被称为 "table-get",那么 MySQL 会将其解释为 "table minus get"。

要么在 table 名称周围使用反引号,要么使用下划线将其重命名为 "table_get"。

即:

INSERT INTO `table-get` (HKey, PKey)

或不使用刻度重命名它(如果它不包含 space 或保留字)

INSERT INTO table_get (HKey, PKey)

阅读标识符限定符:

另外,正如 Halfer 在评论中所说:

"I can't see the code you are using, as Fred says, and I can't see how it has ever worked. It should have blown up on the previous MySQL server version too."

  • 我也同意。

post问题提示:

每当 post 提出问题并且出于某种原因不想 post 实际代码时,至少要 post 很好地表示它。

例如:

INSERT INTO test-get (HKey, PKey)

至少每个人都可以通过伪代码来判断错误可能在哪里。

  • 它让事情变得更清晰。

(代表OP发布答案)。

好的,错误不是出在我的服务提供商这边,而是我在使用一个包含连字符的新 table。这是我的第一个 post,我犯了一个错误,没有发布 100% 的原始代码,让大家感到困惑。我已经学会了我的 lessan,不会再这样做了。对所有觉得自己浪费了时间的人表示抱歉。无论如何,它帮助我解决了错误。