我有一个http-bridge,用于在Second Life应用程序和数据库之间交换信息。它工作正常但最近在我的提供程序将我的数据库的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);
?>
我收到以下错误消息:
错误:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'-get(HKey,PKey)VALUES附近使用正确的语法('XXXXXXX-fe56-XXXX-4bea-XXXXXXXXX','XXXXXX'在第1行
我试过使用这个插入语句,我在Stack Overflow上发表了一篇文章:
$stmt = $mysqli->prepare("INSERT INTO test (HKey, PKey) VALUES (?, ?)");
$stmt->bind_param("ss", $HKey, $PKey);
$stmt->execute();
但是当我插入那行代码时,它也不起作用,我根本没有收到任何错误信息。
答案 0 :(得分:3)
right syntax to use near '-get (HKey, PKey)
您发布的内容vvv
不会抛出该错误。
INSERT INTO test (HKey, PKey)
&#34;嗨弗雷德,你真的很擅长猜测。我的表名包含一个连字符。&#34;
您的表名包含连字符。 (而我不是猜测,错误告诉我)
我怎么能说出来?
很清楚。您拥有HKey和PKey的列名,并且在您发布的错误中的列名前面看到-get
。< / p>
语法:INSERT INTO table (column_1, column_2) VALUES ('value_1', 'value_2')
table =你的table-get,column_1 =你的HKey,column_2 =你的PKey
如果您的表被调用&#34; table-get&#34;例如,然后MySQL将其解释为&#34;表减去得到&#34;。
要么在表名周围使用反引号,要么将其重命名为&#34; table_get&#34;使用下划线。
即:
INSERT INTO `table-get` (HKey, PKey)
或在不使用刻度线的情况下重命名(如果它不包含空格或保留字)
INSERT INTO table_get (HKey, PKey)
阅读标识符限定符:
另外,正如Halfer在评论中所述:
&#34;我无法看到您正在使用的代码,正如Fred所说,我无法看到它是如何工作的。它应该已经破坏了以前的MySQL服务器版本。&#34;
发布问题的提示:
每当发布问题并且不想出于某种原因发布实际代码时,至少发布一个好的代表。
例如:
INSERT INTO test-get (HKey, PKey)
至少每个人都可以通过伪代码判断错误的位置。
答案 1 :(得分:1)
(代表OP发表答案)。
好的,错误不是我的服务提供商,而是我使用包含hyphan的新表。这是我的第一篇文章,我犯了错误,因为不发布100%的原始代码而使每个人感到困惑。我已经学会了我的教训并且再也不会那样做了。对于每个觉得自己浪费时间的人都很抱歉。无论如何它帮助我整理错误。