2010-02-03 3 views
1

Попытка понять, как использовать PDO, и я использую некоторые готовые функции, чтобы упростить задачу, когда я хочу сделать запрос. Первый подключается, второй запускает запрос.Использование PDO для создания функции запроса mysql, не вставлять строки

К сожалению, это не позволит мне вставлять строки INSERT, используя dbquery(). SELECT отлично работает, просто не может заставить ничего работать.

Вот код:

function dbConnect() 
    { 
    global $dbh; 

    $dbInfo['database_target'] = "localhost"; 
    $dbInfo['database_name'] = "mysqltester"; 
    $dbInfo['username'] = "root"; 
    $dbInfo['password'] = "password"; 

    $dbConnString = "mysql:host=" . $dbInfo['database_target'] . "; dbname=" . $dbInfo['database_name']; 
    $dbh = new PDO($dbConnString, $dbInfo['username'], $dbInfo['password']); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $error = $dbh->errorInfo(); 

    if($error[0] != "") 
    { 
    print "<p>DATABASE CONNECTION ERROR:</p>"; 
    print_r($error); 
    } 
    } 

function dbQuery($queryString) 
    { 
    global $dbh; 

    $query = $dbh->query($queryString); 
    $i = 0; 

    foreach ($query as $query2) 
    { 
    $queryReturn[$i] = $query2; 
    $i++; 
    } 

    if($i > 1) 
    { 
    return $queryReturn; 
    } 
    else 
    { 
    return $queryReturn[0]; 
    } 
    } 

ответ

3

PDO::query работает только с запросами, которые возвращают набор результатов (например, SELECT)

Для INSERT/UPDATE/DELETE см PDO::exec

Если вы собираетесь вставлять данные, предоставленные пользователем, в ваши СУБД. Я настоятельно рекомендую использовать подготовленную функциональность оператора PDO для обеспечения автоматического экранирования для предотвращения внедрения SQL.

например.

<?php 
$stmt = $dbh->prepare("INSERT INTO tester1 (name, age) VALUES (?, ?)"); 
$stmt->execute(array('James',25)); 

См PDO::prepare и PDOStatement::execute

+0

Так использовать что-то вроде этого? $ dbh-> exec ("INSERT INTO tester1 (имя, возраст) VALUES ('James', 25)"); – JoeCortopassi

+0

Да. Хотя я настоятельно рекомендую использовать подготовленные заявления, когда это уместно, они справляются с побегом для вас. Я обновлю свой ответ, чтобы отразить это. – hobodave

+0

Спасибо. Подготовленные утверждения предотвращают инъекцию sql? – JoeCortopassi