Недавно я узнал, что 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="[email protected]";
$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; глядя на это, пытаясь понять, что не так …
Пример взят прямо из Руководство по 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();
}
?>
Мне кажется, что вы не можете получить ошибки, попробуйте подключиться так:
try {
$dbh = new PDO($dsn, $user, $password,
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Таким образом, вы узнаете об ошибке.