2012-08-17 4 views
-2

ОБНОВЛЕНИЕ: Этот вопрос был дан ответ У меня есть простая форма, где пользователи могут обновлять свои mysql db. Я использовал mysql_ для подключения к базе данных, но узнал, что pdo - лучший способ сделать это, так как mysql_ обесценивается.Как правильно перенести из mysql_ в PDO

Ниже приведена полная форма OLD, за которой следует полная форма нового пути. Новый способ выдает ошибку

СТАРЫЙ ПУТЬ:

<?php 

$host = 'ip_address'; 
$user = 'user_name'; 
$password = 'password'; 

$link = mysql_connect($host, $user, $password); 

$selected = mysql_select_db('db_name', $link); 

if(!isset($_POST['text-input'])) 

?> 

<form method="post"> 
    %slice% 
    <input type="submit" value="Submit" /> 
</form> 
%[if !edit]% 

<?php 
%[repeat items]% 
$form_input%id=repeatIndex% = $_POST['element-%id=repeatIndex%'] ; 
%[endrepeat]% 

$query = 'INSERT INTO `table_name` (%[repeat items]%%[endif]%%html="Edit Me"%%[if !edit]%,%[endrepeat]%) VALUES (%[repeat items]%"' . $form_input%id=repeatIndex% . '",%[endrepeat]%);'; 
$query = preg_replace('/,\);/',');',$query); 
$query = preg_replace('/,\) /',')',$query); 
mysql_query($query); 

?> 
%[endif]% 

Новый способ:

<?php 
db = new PDO('mysql:host=ip_address;dbname=db_name;', 'user_name', 'password'); 
?> 
    <form method="post"> 
     %slice% 
     <input type="submit" value="Submit" /> 
    </form> 
    %[if !edit]% 

<?php 
%[repeat items]% 
$form_input%id=repeatIndex% = $_POST['element-%id=repeatIndex%'] ; 

%[endrepeat]% 

$query = 'INSERT INTO `table_name` (%[repeat items]%%[endif]%%html="Edit Me"%%[if !edit]%,%[endrepeat]%) VALUES (%[repeat items]%"' . $form_input%id=repeatIndex% . '",%[endrepeat]%);'; 
$query = preg_replace('/,\);/',');',$query); 
$query = preg_replace('/,\) /',')',$query); 
mysql_query($query); 


?> 
%[endif]% 

Ошибки, которые получает бросок на это:

Warning: mysql_query() [function.mysql-query]: Access denied for user 
'kuler'@'localhost' (using password: NO) in 
/home/path_to/index.php on line 125 

Warning: mysql_query() [function.mysql-query]: A link to the server could not be 
established in /home/path_to/index.php on line 125 

Я надеюсь, что предоставили достаточно информации.

+6

Вы все еще зову 'mysql_query()' с PDO. Эти два не совместимы. Просмотрите руководство [PDO manual] (http://php.net/manual/en/book.pdo.php) для многих примеров, используя 'prepare()' 'execute()' или 'query()'. –

+0

Пожалуйста, посмотрите [это] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php), хотя речь идет о SQL-инъекции, но она дает вам базовый информацию о PDO. – Adi

ответ

1

Решение заключается в следующем:

<?php 

//Connection vars 
$host = '%id=server%'; 
$user = '%id=username%'; 
$password = '%id=password%'; 
$databasename = '%id=database%'; 

//This block establishes the connection 
try{ 
    // 
    $connectiondetails = "mysql:host={$host};dbname={$databasename}"; 
    $db = new PDO($connectiondetails , $user , $password); 
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); 
} 
catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

//Check if all the input fields of the form have been submitted 
if(
    %[repeat items]% 
    isset($_POST['element-%id=repeatIndex%'])&& 
    %[endrepeat]% 
    (true===true) 
){ 


    //The variables to read the output 
    %[repeat items]% 
    $form_input%id=repeatIndex% = $_POST["element-%id=repeatIndex%"] ; 
    %[endrepeat]% 

    //DB 
    global $db;  //must set this, otherwise can't access the db 
    $query = 'INSERT INTO `%id=table%` (%[endif]%%[repeat items]%%html="Edit Me"%%[if !edit]%,%[endif]%%[endrepeat]%%[if !edit]%)%[endif]% %[if !edit]%VALUES (%[repeat items]%"' . $form_input%id=repeatIndex% . '",%[endrepeat]%);'; 
    $query = preg_replace('/,\);/',');',$query); 
    $query = preg_replace('/,\) /',')',$query); 
    $db->query($query); 
    //[DB] 
} 

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