2014-02-13 2 views
0

При работе с PDO PHP вызов execute в подготовленном операторе, как представляется, полностью зависает при выполнении сценария. PDO инициализируется следующим образом:Выполнение PHP PDO выполняется зависанием

$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', ''); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$db->setAttribute(PDO::ATTR_PERSISTENT, false); 

Насколько я знаю, присоединительные работы не выполнить точную никаких признаков того, учитывая, что она выходит из строя. Затем, позже, я вызываю «готов», а затем выполняю, и выполнение, похоже, останавливается.

echo "Hi";              //executes 
$username = mysql_real_escape_string($_POST['username']); 
echo "Still Here";            //executes 
$password = md5(mysql_real_escape_string($_POST['password'])); 
echo "So far so good";           //executes 
$stmt = $db->prepare("SELECT * FROM users WHERE Username=:username"); 
echo "Still good";            //executes 
$stmt.execute(array(':username' => $username)); 
echo "Nope...";            //doesn't execute 
if($stmt->rowCount() >= 1) 
{ 
    echo "Sorry, that username is already taken."; 
} 

Я не уверен, что именно происходит, что вызывает эту ошибку, однако помощь в фиксации будет понятно.

+0

change '$ stmt.execute (array (': username' => $ username));' to '$ stmt-> execute (array (': username' => $ username)); ' –

ответ

1

Вы пропустили -> по . в строке выполнения.

заменить

$stmt.execute(array(':username' => $username)); 

по $stmt->execute(array(':username' => $username));

вы можете использовать привязку. вам не нужно использовать mysql_real_escape_string в PDO

+0

@Colin Moore: вы его протестировали? –

+0

Сомневаюсь, что я когда-нибудь буду жить этим, да, спасибо, новые глаза часто ловит такие глупые ошибки. –

0

mysql_real_escape_string нуждается в подключении mysql, которого нет, поскольку вы подключаетесь к PDO, поэтому ваша функция ничего не делает.

Кроме того, ПОЧЕМУ вы не используете только подготовленные заявления?

Смежные вопросы