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,不会再这样做了。对所有觉得自己浪费了时间的人表示抱歉。无论如何,它帮助我解决了错误。
我有一个 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,不会再这样做了。对所有觉得自己浪费了时间的人表示抱歉。无论如何,它帮助我解决了错误。