如何在php / mySql中检索单个记录?

时间:2013-12-14 20:08:31

标签: php mysql sql mysqli

我正在尝试使用以下语句返回单个记录:

$username = $_POST["username"];
$con=mysqli_connect("localhost","root","pass","Testproject");

// Check connection
if (mysqli_connect_errno($con))
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }


$sql = mysqli_query($con,"SELECT * FROM registeredusers where Username=".$username);
  $row = mysqli_fetch_array($sql);

  if (!$row) {
    printf("Error: %s\n", mysqli_error($con));
    exit();
}

我收到以下错误:

  

警告:mysqli_fetch_array()期望参数1为mysqli_result,   “Filepath go here”中给出的布尔值/AddEvent.php错误:未知   'where子句'中的列'Tom'

在这种情况下,“Tom”是用户名。任何想法如何解决这一问题?我在stackoverflow上看过类似的问题,但是大多数都有点复杂或者没有尝试获得单个记录。

编辑:我已将查询更改为以下内容:

  $sql = mysqli_query($con,"SELECT * FROM registeredusers") or die(mysqli_error($con));
  $row = mysqli_fetch_array($sql);

并添加了这个“

$row_cnt = $result->num_rows;
 printf("Result set has %d rows.\n", $row_cnt);

我得到以下内容:

  

“结果集有0行”。

我在DBMS中输入了确切的查询,并返回了很多行。

1 个答案:

答案 0 :(得分:1)

您缺少$ username的引号,并且易受SQL注入攻击。我建议你绑定变量,所以MySQLi会做引用并保护你免受SQL注入:

$sql = "SELECT * FROM registeredusers where Username = ?";
if ($stmt = $con->prepare($sql)) {
    $stmt->bind_param('s', $username);
    $stmt->execute();
    $results = $stmt->get_result();
    $row = mysqli_fetch_array($results);
    var_dump($row);
}