【问题标题】:So i'm trying to have it check to see if the steamid64 all ready exists before inserting but it just inserts any way?所以我试图让它检查在插入之前是否已经准备好steamid64,但它只是以任何方式插入?
【发布时间】:2014-08-29 23:53:41
【问题描述】:

所以我试图让它检查在插入之前是否已经准备好 steamid64,但它只是以任何方式插入? 我这里的 PHP 不太好。

<?php
$con=mysqli_connect("localhost","user","pass","Gmod");

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

$SteamID64 = mysqli_real_escape_string($con, $_POST['SteamID64']);
$enable = mysqli_real_escape_string($con, $_POST['enable']);

$sql="SELECT * FROM Loading (SteamID64, enable) WHERE SteamID64='$SteamID64'";
 if(mysql_num_rows($sql)>=1) {
echo'<center>The music is already disabled!</center>';
}
else {
$sql="INSERT INTO Loading (SteamID64, enable)
VALUES ('$SteamID64', '$enable')";
}

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "<center>The music will not play when you connect.</center>";

mysqli_close($con);
?>

我从一些论坛和 w3schools.com 上得到了这个 并对其进行了编辑。

好的,我这样做了,但它仍然只是插入数据?

<?php
mysqli_report(MYSQLI_REPORT_STRICT);
$con=mysqli_connect("localhost","root","server","Gmod");
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$SteamID64 = mysqli_real_escape_string($con, $_POST['SteamID64']);
$enable = mysqli_real_escape_string($con, $_POST['enable']);

mysqli_query($con,"SELECT * FROM Loading WHERE SteamID64='$SteamID64'");
 if(mysqli_num_rows(mysqli_query)>=1) {
echo'<center>The music is already disabled!</center>';
}
else {
mysqli_query($con,"INSERT INTO Loading (SteamID64, enable)
VALUES ('$SteamID64', '$enable')");
}
echo "<center>The music will not play when you connect.</center>";

mysqli_close($con);
?>

【问题讨论】:

  • 请注意,请不要使用mysql_* 函数,它们已被弃用。您可以使用mysqli_* 函数(过程或OOP 风格)或PDO(抽象层)。
  • 这对我没有帮助。
  • 不要将mysqli_*mysql_* 函数混用。
  • 所以我只需要将 i 添加到 mysql_* 的末尾,就像 mysqli_* 一样?
  • 并非所有函数的名称都相同,但在这种情况下,您应该使用 mysqli_num_rows 并传递查询资源(您可以从 mysqi_query代码)作为第一个参数。

标签: php mysql steam


【解决方案1】:

除了你不能混合使用 mysql_*mysqli_* 这样的函数(选择一个,mysqli_* 并坚持下去)之外,你的 sql 中有一个错误:

SELECT * FROM Loading (SteamID64, enable) WHERE SteamID64='$SteamID64'
                      ^^^^^^^^^^^^^^^^^^^ this should not be here

您需要将其更改为:

SELECT * FROM Loading WHERE SteamID64='$SteamID64'

您可以让 mysqli 抛出异常,以便它在出错时准确地告诉您出了什么问题。只需将其添加到脚本的顶部:

mysqli_report(MYSQLI_REPORT_STRICT);

您遇到的另一个问题是,您的第二个查询的执行应该在前一个条件的 else 部分内。

正如@FabrícioMatté 已经提到的,您实际上需要使用mysqli_query() 执行您的查询,只是设置字符串不会做任何事情。

【讨论】:

  • 问题中的代码也少了一个mysqli_query,而mysql_num_rows应该是mysqli
  • @FabrícioMatté 谢谢,我添加了您的第一点,第二点已经在 cmets 和我的回答的第一行中提到。
  • 哦,好吧,你可以更清楚地说“你必须在调用mysqli_num_rows之前执行查询”,两行代码块可以帮助说明。
猜你喜欢
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多