PHP MySQL数据库问题

PHP MySQL database problem

代码1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class dbConnect {
  var $dbHost = 'localhost',
  $dbUser = 'root',
  $dbPass = '',
  $dbName = 'input_oop',
  $dbTable = 'users';
  function __construct() {
</p>

<p>
$dbc = mysql_connect($this->dbHost,$this->dbUser,$this->dbPass) or die ("Cannot connect to MySQL :" . mysql_error());
  mysql_select_db($this->dbName) or die ("Database not Found :" . mysql_error());
  }
  }
class User extends dbConnect {
  var $name;
  function userInput($q) {
 $sql ="INSERT INTO $this->dbTable set name = '".$q."'";
  mysql_query($sql) or die (mysql_error());
  }
}
?>

这是调用类的代码。

1
2
3
4
5
6
<?php
include ('class.php');
$q=$_GET["q"];
$user = new User;
  $user->userInput($q);
?>

< BR>代码2:

1
2
3
4
5
6
7
<?php
  $q = $_GET['q'];
$dbc=mysql_connect("localhost","root","") or die (mysql_error());
  mysql_select_db('input_oop') or die (mysql_error());
  $sql ="INSERT INTO users set name = '".$q."'";
  mysql_query($sql) or die (mysql_error());
?>

我的代码1保存在我的数据库中:
alt text
保存多个!

我的代码2保存在我的数据库中:
alt text

我的代码1有什么问题?


好吧,代码1对SQL注入是开放的,因为您没有转义$Q。至于为什么您得到两个记录,这个问题不在代码1中发现,但可能在调用userInput的代码中发现。


关于SQL注入漏洞,我建议在PDO中使用准备好的语句。它使用方便,非常安全。

更多信息:http://php.net/manual/en/pdo.prepared-statements.php


它对所有的SQL注入都是非常开放的,试着拥有一个db.php文件,在每个需要db的php文件的开头只需要一次。