Преобразование моих приложений MySQL в PDO

Недавно я узнал, что mysql ext будет удален в pHP в будущем, и поэтому мне нужно перейти на mysqli или PDO ext…

Кажется, что преобразование в PDO будет легче, и поэтому я сначала пытаюсь это сделать. У меня есть простое приложение mysql, которое я пытаюсь преобразовать в PDO; вот:

$hostname='localhost';
$username='user11111';
$password='gpassword1';
$dbname='gman_school_db';
$usertable='your_tablename';
$yourfield = 'your_field';

$db = new PDO("mysql:host=$hostname;dbname=$dbname", "$username", "$password");

$sql = "INSERT INTO members (user_id, user_name, email)
VALUES (680, 'GMAN678BABY333333', 'email_ok_man')";

mysql_query($sql);

$db = null;

Я собрал это воедино, найдя некоторый код преобразования, но он не работает, я не знаю, является ли мой метод соединения каким-то образом неправильным или мой «оператор вставки» не может работать с этим соединением PDO; так что я надеюсь, что кто-то может сказать мне, что не так с этим …

Спасибо!

******* ОБНОВЛЕНО ПОПЫТКА 2:22 утра EST ***************

вот моя попытка использовать информацию как от Фреда, так и от Hankypanky:

/* Connect to a mysql database using driver invocation */
$dsn = 'mysql:dbname=gman_db1;host=localhost';
$user = 'gman_user1';
$password = 'gman54678';

try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}

/* Execute a prepared statement by binding PHP variables */

$user_id=699;
$user_name="wayne_sax";
$email="wayne@saxman.com";

$sth = $dbh->prepare('INSERT INTO members (user_id, user_name,  email) VALUES (:user_id, :user_name, :email)');

$sth->bindParam(':user_id', $user_id, PDO::PARAM_INT);
$sth->bindParam(':user_name', $user_name, PDO::PARAM_STR, 12);
$sth->bindParam(':email', $email, PDO::PARAM_STR, 12);
$sth->execute();

Я не получаю никаких ошибок при запуске; но он не вставляет запись должным образом, поэтому что-то не так; так что если кто-то может увидеть что-то не так с этим, пожалуйста, дайте мне знать …

Всего наилучшего, G

** обновление 3:34 утра *
используя код Hanky ​​Pankys — я получил следующие ошибки:

Array ( [0] => 00000 [1] => [2] => )
Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the  manual that corresponds to your MySQL server version for the right syntax to use near   'INSERT INTO members (user_id, user_name, email) VALUES (699,Â' at line 1 )

Я также выполнил предложение Meda ниже, и оно получило «фатальную ошибку» в операторе execute; что заставляет меня думать, что это нормально;

так что, похоже, мое предложение вставки испорчено; я знаю, как сделать это в MySQL; глядя на это, пытаясь понять, что не так …

-1

Решение

Пример взят прямо из Руководство по PHP. Какую часть этого вы не понимаете конкретно?

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>

Очевидно, это предполагает, что вы сначала создали объект PDO, но даже это можно увидеть на руководство.

<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}

?>
3

Другие решения

Мне кажется, что вы не можете получить ошибки, попробуйте подключиться так:

try {
$dbh = new PDO($dsn, $user, $password,
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}

Таким образом, вы узнаете об ошибке.

1