PHP MySQL数据库问题

时间:2010-04-27 18:10:01

标签: php mysql

代码1:

<?php
class dbConnect {
  var $dbHost = 'localhost',
  $dbUser = 'root',
  $dbPass = '',
  $dbName = 'input_oop',
  $dbTable = 'users';
  function __construct() {

$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()); } } ?>


这是调用该类的代码。

<?php
include ('class.php');
$q=$_GET["q"];
$user = new User;
  $user->userInput($q);
?>


代码2:

<?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有什么问题?

3 个答案:

答案 0 :(得分:4)

好吧,代码1对SQL注入是开放的,因为你没有逃避$ q。至于为什么你得到两条记录,问题不在代码1中找到,但可能在调用userInput的代码中找到。

答案 1 :(得分:0)

对SQL注入非常开放,尝试在每个需要数据库的php文件的开头使用db.php文件和require_once。

答案 2 :(得分:0)

关于SQL注入漏洞,我建议对PDO使用预处理语句。它易于使用且极为安全。

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