2013-07-29 2 views
-1

Мне было рекомендовано использовать методы инъекции с использованием sql-sql, поскольку я вставляю значения в свою базу данных. Я просмотрел веб-страницы, и моя первая неудачная попытка - это то, о чем мне нужна помощь, с методом PDO. Я нашел примеры в Интернете, чтобы быть waaay слишком пустым для меня для понимания (кстати, я провел линию, и мне сказали, что PDO включен):Новые для SQL-инъекций (ошибка)

Является ли это хорошим каким-либо образом, формой или формой?

<?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 
+2

Вы не можете смешивать и сравнивать Mysqli и PDO. Используйте один из них, но не оба. – Maximus2012

+2

Ваш код не содержит никакого вызова метода 'prepare()'. –

+0

Ваш код в основном бесполезен для ответа на ваш вопрос, так как вы не показываете, как вы фактически выполняете запросы. В реальном мире эквивалент, вы спрашиваете, есть ли нечеткие кости на зеркало заднего вида вашего автомобиля, сделают вас хорошим водителем. –

ответ

2

Одна большая проблема в вашем коде, что это как с помощью mysqli_connect и PDO для создания соединения с базой данных. Не делай этого; это не поддерживается. Используйте один или другой.

Линии, которые вы подключаете к соединениям PDO, пытаются подключиться к четырем отдельным базам данных, SQL Server, Sybase, MySQL и SQLLite, все работает на localhost. Но вы держите дескриптор только для последнего, поскольку вы назначаете соединение с базой данных с одной и той же переменной.

Эта переменная $DBH - это ваша ссылка на сеанс базы данных (соединение), если соединение выполнено успешно. Если это не удастся, ему будет присвоено значение false, которое вы можете проверить, прежде чем продолжить.

Я думаю, что все, что вам нужно, это одно соединение PDO с MySQL, например:

<?php 
include ('config.php'); 

$host = 'localhost'; 
$dbname = '****'; 
$user = '****'; 
$pass = '*****'; 
try { 
    # MySQL with PDO_MYSQL 
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
} 
catch(PDOException $e) { 
    echo "Connect failed: " . $e->getMessage(); 
} 

Я экстраполяцией здесь, но наиболее вероятное объяснение сообщения об ошибке вы получаете, что у вас есть строка коды (не показано в примере коды), как это:

$sth = $DBH->prepare($sql); 

вопрос заключается в том, что $DBH не является ссылка на действительное подключение к базе данных. $DBH имеет значение «false», и это связано с тем, что попытка подключения к базе данных не удалась. И false не является объектом, поэтому он не может иметь связанный с ним метод под названием «подготовить».

Смежные вопросы