【发布时间】:2015-01-12 11:25:12
【问题描述】:
我有一个 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' at line 1
我曾尝试使用我在 Stack Overflow 上的一篇文章中找到的插入语句:
$stmt = $mysqli->prepare("INSERT INTO test (HKey, PKey) VALUES (?, ?)");
$stmt->bind_param("ss", $HKey, $PKey);
$stmt->execute();
但是当我插入那行代码时,它也不起作用,我根本没有收到任何错误消息。
【问题讨论】:
-
$P-Key和$H-Key不要使用连字符。(H-Key, P-Key)同样的事情。在列周围使用刻度线`。对于这两个实例,SQL 都将其解释为“H minus Key”等。这不是您的提供者,而是您的代码。 -
right syntax to use near '-get (HKey, PKey)您发布的内容不会引发该错误。您为什么不重新开始并发布您真正使用的代码,以及表单以及您如何通过真实示例传递输入。我认为 真的 是,您的表名包含一个连字符,这又是我的原始评论。 SQL 认为你想做数学。 -
我看不到你正在使用的代码,正如 Fred 所说的,我看不到它是如何工作的。它也应该在以前的 MySQL 服务器版本上被炸毁。就目前而言,这个问题将会结束,但至少这个教训是有价值的——展示真实的代码,而不是它的净化版本。
-
@halfer 我认为 OP 目前的沉默可以解释为:“哇哦,它有效,我玩得很开心!!” ;- )
-
OP,我已将您的更新移至答案(它覆盖了我对您的问题所做的一些改进编辑,因此无论如何它都需要回滚 - 请参阅编辑历史记录)。另外,哦,天哪!请不要在互联网上的任何地方完全输入大写字母——这通常被认为是大喊大叫。这不是 Stack Overflow 规则 - 这是过去 25 年左右的网络礼仪。
标签: php mysql sql-server sql-insert