Я пытаюсь разобраться в готовых высказываниях.
В принципе, я бы сделал вставку, как обычно:
$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 (), используя подготовленные выражения, как указано выше?