Web设计PHP SQL查询问题

Web设计PHP SQL查询问题,php,mysql,sql,database,Php,Mysql,Sql,Database,这是我的function.php文件中的一个函数。现在我只是想让它输出1或0,这取决于用户名是否在MYSQL数据库中 function retrieve_single($col, $table, $item, $con) { require_once('include/global.php'); $sql = "SELECT * FROM users WHERE username = Username1"; $conn = new mysqli($DBServer, $DBUser

这是我的function.php文件中的一个函数。现在我只是想让它输出1或0,这取决于用户名是否在MYSQL数据库中

function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT * FROM users WHERE username = Username1";
  $conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
  if ($conn->connect_error) { 
    trigger_error('Database connection failed: '.$conn->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
我一直在不断地改变东西,试图找出它到底出了什么问题,我所知道的只是我不断遇到的一个sql错误。到目前为止,我已经写了它,没有变量,因为我试图解决这个问题

global.php文件:

$DBServer = 'localhost'; $DBUser   = 'root'; $DBPass   = ''; $DBName   = 'social';

有人能帮我吗!我知道问题很简单,因为这是我第一次遇到这个问题

您所说的错误(您没有向我们展示)是由以下原因造成的:

WHERE username =  Username1 ";
                 ^         ^ // missing quotes
它需要在
Username1

即:

如果您还没有这样做,请将错误报告添加到文件的顶部,这将在生产测试期间有所帮助

error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

您所说的错误(您没有向我们展示)是由以下原因造成的:

WHERE username =  Username1 ";
                 ^         ^ // missing quotes
它需要在
Username1

即:

如果您还没有这样做,请将错误报告添加到文件的顶部,这将在生产测试期间有所帮助

error_reporting(E_ALL);
ini_set('display_errors', 1);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

你的功能很混乱。在代码的其余部分如何调用它

function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT * FROM users WHERE username = Username1";
  $conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
  if ($conn->connect_error) { 
    trigger_error('Database connection failed: '.$conn->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
因此,您的
retrieve_single()
界面具有以下
$col
$table
$item
$con
。但是它们在函数中的使用位置是什么?它们似乎100%没有被使用。所以你只是像
retrieve\u single()
那样调用它,希望它能工作?看起来很奇怪

那么在您的函数中,您的查询是:

$sql = "SELECT * FROM users WHERE username = Username1";
这没什么意义。它周围至少应该有单引号,如下所示:

$sql = "SELECT * FROM users WHERE username = 'Username1'";
$sql = "SELECT * FROM users WHERE username = '$Username1'";
$sql = "SELECT * FROM users WHERE username = '$item'";
function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT $col FROM $table WHERE username = '$item'";
  if ($con->connect_error) { 
    trigger_error('Database connection failed: '.$con->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
但它似乎应该是这样一个变量:

$sql = "SELECT * FROM users WHERE username = 'Username1'";
$sql = "SELECT * FROM users WHERE username = '$Username1'";
$sql = "SELECT * FROM users WHERE username = '$item'";
function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT $col FROM $table WHERE username = '$item'";
  if ($con->connect_error) { 
    trigger_error('Database connection failed: '.$con->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
但也就是说,
$Username1
从何而来?也许可以像下面这样查看应该是
$item
的接口变量:

$sql = "SELECT * FROM users WHERE username = 'Username1'";
$sql = "SELECT * FROM users WHERE username = '$Username1'";
$sql = "SELECT * FROM users WHERE username = '$item'";
function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT $col FROM $table WHERE username = '$item'";
  if ($con->connect_error) { 
    trigger_error('Database connection failed: '.$con->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
也许整个函数需要重构,以适应我注意到的所有奇怪之处,如:

$sql = "SELECT * FROM users WHERE username = 'Username1'";
$sql = "SELECT * FROM users WHERE username = '$Username1'";
$sql = "SELECT * FROM users WHERE username = '$item'";
function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT $col FROM $table WHERE username = '$item'";
  if ($con->connect_error) { 
    trigger_error('Database connection failed: '.$con->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
使用此重构函数,您可以在函数外部像这样访问它:

$con = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
retrieve_single('*', 'users', 'Username1', $con);

再说一次,我不知道你是如何在更大的代码中使用你的函数的,所以我只是根据你所介绍的来做一些补充。就目前情况而言,您所介绍的函数本身是有问题的。

您的函数非常混乱。在代码的其余部分如何调用它

function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT * FROM users WHERE username = Username1";
  $conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
  if ($conn->connect_error) { 
    trigger_error('Database connection failed: '.$conn->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
因此,您的
retrieve_single()
界面具有以下
$col
$table
$item
$con
。但是它们在函数中的使用位置是什么?它们似乎100%没有被使用。所以你只是像
retrieve\u single()
那样调用它,希望它能工作?看起来很奇怪

那么在您的函数中,您的查询是:

$sql = "SELECT * FROM users WHERE username = Username1";
这没什么意义。它周围至少应该有单引号,如下所示:

$sql = "SELECT * FROM users WHERE username = 'Username1'";
$sql = "SELECT * FROM users WHERE username = '$Username1'";
$sql = "SELECT * FROM users WHERE username = '$item'";
function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT $col FROM $table WHERE username = '$item'";
  if ($con->connect_error) { 
    trigger_error('Database connection failed: '.$con->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
但它似乎应该是这样一个变量:

$sql = "SELECT * FROM users WHERE username = 'Username1'";
$sql = "SELECT * FROM users WHERE username = '$Username1'";
$sql = "SELECT * FROM users WHERE username = '$item'";
function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT $col FROM $table WHERE username = '$item'";
  if ($con->connect_error) { 
    trigger_error('Database connection failed: '.$con->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
但也就是说,
$Username1
从何而来?也许可以像下面这样查看应该是
$item
的接口变量:

$sql = "SELECT * FROM users WHERE username = 'Username1'";
$sql = "SELECT * FROM users WHERE username = '$Username1'";
$sql = "SELECT * FROM users WHERE username = '$item'";
function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT $col FROM $table WHERE username = '$item'";
  if ($con->connect_error) { 
    trigger_error('Database connection failed: '.$con->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
也许整个函数需要重构,以适应我注意到的所有奇怪之处,如:

$sql = "SELECT * FROM users WHERE username = 'Username1'";
$sql = "SELECT * FROM users WHERE username = '$Username1'";
$sql = "SELECT * FROM users WHERE username = '$item'";
function retrieve_single($col, $table, $item, $con) {
  require_once('include/global.php');

  $sql = "SELECT $col FROM $table WHERE username = '$item'";
  if ($con->connect_error) { 
    trigger_error('Database connection failed: '.$con->connect_error, E_USER_ERROR ); 
  }
  $rs=$conn->query($sql);

  if($rs === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ERROR);
  } else {
    $rows_returned = $rs->num_rows;
    echo $rows_returned;
  }
}
使用此重构函数,您可以在函数外部像这样访问它:

$con = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
retrieve_single('*', 'users', 'Username1', $con);

再说一次,我不知道你是如何在更大的代码中使用你的函数的,所以我只是根据你所介绍的来做一些补充。就目前情况而言,您所介绍的函数本身就是有问题的。

询问OP lol@JakeGould我几乎100%确定用户名不是
int
。用户名通常是文本。如果OP回来说“这不起作用”,那么我们肯定会知道;-)你的回答也很有道理,杰克。如果OP选择了你的,太好了。我们已经找到了问题的根源@Jakegould谢谢我没有注意到丢失的报价。这造成了很大的不同。Username1是数据库中的测试用户名。对不起,我应该说得更清楚一点问OP lol@JakeGould我几乎100%确定用户名不是
int
。用户名通常是文本。如果OP回来说“这不起作用”,那么我们肯定会知道;-)你的回答也很有道理,杰克。如果OP选择了你的,太好了。我们已经找到了问题的根源@Jakegould谢谢我没有注意到丢失的报价。这造成了很大的不同。Username1是数据库中的测试用户名。对不起,我应该说得更清楚一点,我知道我是先回答的,不过杰克,你的回答更适合可能出现的情况。我做了你的+1。@Fred ii-I
+1
也做了你的。但正如我详细说明的,这里有很多问题。从单引号到界面,再到几乎所有关于这个看似简单的函数的结构的东西。谢谢你,杰克。我确实考虑过可能丢失的
$
和一个可能的变量,在你发布你的之前,然后注意到你已经在你的文章中涵盖了这一点,因此,我现在没有必要记下它,如果,那么。。。你掩盖了它,可能会假装我复制了你的干杯我知道我先给出了答案,但是杰克,你的答案更适合可能出现的情况。我做了你的+1。@Fred ii-I
+1
也做了你的。但正如我详细说明的,这里有很多问题。从单引号到界面,再到几乎所有关于这个看似简单的函数的结构的东西。谢谢你,杰克。我确实考虑过可能丢失的
$
和一个可能的变量,在你发布你的之前,然后注意到你已经在你的文章中涵盖了这一点,因此,我现在没有必要记下它,如果,那么。。。你掩盖了它,可能会假装我复制了你的cheersVery模糊的标题,你还没有告诉我们错误<代码>未知列用户名1有没有可能?标题很模糊,您还没有告诉我们