Как превратить следующую вставку в подготовленное заявление, чтобы оно было безопасным? - PullRequest
2 голосов
/ 15 сентября 2010

Я пытаюсь разобраться в готовых высказываниях.

В принципе, я бы сделал вставку, как обычно:

$sql = '
    INSERT INTO customers 
      (customer_first, customer_last, customer_address, customer_email)
    VALUES
      (' . mysql_real_escape_string($_POST['customer_first']) . ', 
      ' . mysql_real_escape_string($_POST['customer_last']) . ', 
      ' . mysql_real_escape_string($_POST['customer_address']) . ', 
      ' . mysql_real_escape_string($_POST['customer_email']) . '  )  
  ';
  mysql_query($sql);

Из того, что мне сказали, однако, есть более безопасный способ сделать это, используя Подготовленные заявления.

Пока я думаю, что это сделано так:

$stmt = $dbh->prepare("INSERT INTO customers (customer_first, customer_last, customer_address, customer_email) VALUES (:customer_first, :customer_last, :customer_address, :customer_email)");
$stmt->bindParam(':customer_first', $_POST['customer_first']);
$stmt->bindParam(':customer_last', $_POST['customer_last']);
$stmt->bindParam(':customer_address', $_POST['customer_address']);
$stmt->bindParam(':customer_email', $_POST['customer_email']);

$stmt->execute();

Это правильно? Или есть лучший способ сделать то, что я пытаюсь достичь? Если я попробую описанное выше, я получу ошибку «Вызов функции-члена prepare () для необъекта» - что это значит?

Я использую примеры @ http://php.net/manual/en/pdo.prepared-statements.php. Это относится к $ dbh - откуда это берется? Предполагается, что ссылка на $ dbh указана в другом месте - я предполагаю, что это как-то связано с подключением к базе данных?

Помимо этих вопросов, могу ли я по-прежнему использовать такие вещи, как mysql_insert_id () или mysql_error (), используя подготовленные выражения, как указано выше?

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Сообщение об ошибке указывает на вашу проблему с $dbh объектом - как он инициализируется?

1 голос
/ 15 сентября 2010

Если вы новичок в ООП, вы можете начать с mysqli для более непосредственного знакомства с функциональностью, синтаксисом и поддержкой функционального программирования, но стоит пересмотреть класс PDO если готовы взяться за ООП.

Стоит рассмотреть, чтобы решить, с чего начать: mysqli или PDO - каковы плюсы и минусы?

Это относится к $ dbh - где это получить это от? $ Dbh должен быть ссылка в другом месте - я предполагаю это что-то делать с базой данных подключение

$ dbh = дескриптор базы данных (как определено в PDO> Соединения и управление соединениями документ)

Могу ли я использовать такие вещи, как mysql_insert_id () или mysql_error () используя подготовленные утверждения как выше?

PDO :: lastInsertId , PDO :: errorInfo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...