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保存在我的数据库中:
保存多个!
我的代码2保存在我的数据库中:
我的代码1有什么问题?
好吧,代码1对SQL注入是开放的,因为您没有转义$Q。至于为什么您得到两个记录,这个问题不在代码1中发现,但可能在调用
关于SQL注入漏洞,我建议在PDO中使用准备好的语句。它使用方便,非常安全。
更多信息:http://php.net/manual/en/pdo.prepared-statements.php
它对所有的SQL注入都是非常开放的,试着拥有一个db.php文件,在每个需要db的php文件的开头只需要一次。