所以我必须将所有mysql_
命令更改为PDO,因为它们是正式折旧的,PDO是最普遍的。 INSERT为何如此复杂,这有什么好处?
例如,在我的旧代码中,我这样做:
mysql_connect("$host", "$username", "$db_password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
mysql_query("INSERT INTO $tbl_name(this, that, him, her) VALUES('$this', '$that', '$him', '$her')")or die(mysql_error());
使用PDO
$conn = new PDO('mysql:host=HST_NAME;dbname=DB_NAME;charset=utf8', 'USER', 'PASSWORD');
$sql = "INSERT INTO books (this, that, him, her) VALUES (:this,:that,:him,:her)";
$q = $conn->prepare($sql);
$q->execute(array(':this'=>$this,
':that'=>$that,
':him'=>$him,
':her'=>$her ));
当我必须立即输入大量数据时,PDO会变得庞大。这有什么好处?
寻找为什么要做回答,而不是做什么
答案 0 :(得分:3)
因为你的mysql_query 格式不正确 如果您需要正确格式化,则需要与PDO相同的代码量
另外,由于某种原因,您选择“长”PDO语法。虽然代码可能是
$sql = "INSERT INTO books (this, that, him, her) VALUES (?,?,?,?)";
$q = $conn->prepare($sql);
$q->execute(array($this,$that,$him,$her));
尽管如此,对于其中任何一个,您都可以使用some sort of automation
答案 1 :(得分:0)
你应该不直接在SQL语句中使用变量;这会导致各种安全漏洞。
正如您所说,mysql_
函数已被弃用。我知道如果你长时间使用mysql_
函数,你可能不愿意转向PDO,但是有很多原因可以解释为什么PDO比旧mysql_
函数更好:
mysql_
函数PDO还会将数据库查询与参数分开。请考虑以下事项:
$sql = "INSERT INTO users (first_name, last_name, email)
VALUES (:first_name, :last_name, :email)";
$smt->prepare($sql);
$smt->bindParam(':first_name', $first_name);
$smt->bindParam(':last_name', $last_name);
$smt->bindParam(':email', $email);
$smt->execute();
或者不那么“臃肿”的语法:
$sql = "INSERT INTO users (first_name, last_name, email)
VALUES (:first_name, :last_name, :email)";
$smt->prepare($sql);
$smt->execute(array(
':first_name' => $first_name,
':last_name' => $last_name,
':email' => $email
));
如您所见,参数与语句本身分开。它比在你的陈述中插入变量更清晰,这看起来很难看,正如我所说,会导致注入漏洞。