【发布时间】:2013-07-29 19:12:09
【问题描述】:
我被建议使用反 sql 注入方法,因为我在我的数据库中插入值。我浏览了网络,我的第一次失败尝试是这个,我需要一些帮助,使用 PDO 方法。我发现网上的例子太空洞了,我无法理解(顺便说一句,我跑了一条线,它告诉我 PDO 已启用):
这在任何方面、形状或形式上都好吗?
<?php
include ('config.php');
// Host, User, Pass, DB
$con=mysqli_connect("127.0.0.1","*****","*****","*****");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQLi: " . mysqli_connect_error();
}
$host = 'localhost';
$dbname = '****';
$user = '****';
$pass = '*****';
try {
# MS SQL Server and Sybase with PDO_DBLIB
$DBH = new PDO("mssql:host=$host;dbname=$dbname, $user, $pass");
$DBH = new PDO("sybase:host=$host;dbname=$dbname, $user, $pass");
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
# SQLite Database
$DBH = new PDO("sqlite:my/database/path/database.db");
}
catch(PDOException $e) {
echo $e->getMessage();
}
另外,我在提交表单时收到此错误:
Fatal error: Call to a member function prepare() on a non-object in /home/product/*****/*****/*****/processForm-test.php on line 68
【问题讨论】:
-
不能混搭Mysqli和PDO。使用其中之一,但不能同时使用。
-
您的代码不包含对
prepare()方法的任何调用。 -
您的代码对于回答您的问题基本上没有用,因为您没有显示您实际运行查询的方式。在现实世界中,你问的是汽车后视镜上的模糊骰子是否会让你成为一名优秀的司机。
-
如果您对 mysqli 还没有走得太远,我会强烈建议切换到 pdo。它更便携且具有更多功能,而 mysqli 更受限制,(可以说)更难使用,并且仅适用于 php。对于几乎任何项目,绝对没有充分的理由使用 mysqli 而不是 pdo。
-
哦。在那种情况下,绝对不要切换(不值得你花时间!)。如果你还没有准备好,就开始使用准备好的语句(谷歌“mysqli准备好的语句”;有很多例子)。这就是你需要做的。
标签: php sql pdo sql-injection