2016-06-09 4 views
0

Я работаю с php и пытаюсь установить соединение с mysql с pdo. Я читал, что сначала должен иметь расширение pdo (не знаю, знаю ли я, ни как проверить его). Я изменил файл config.inc.php phpmyadmin вслух внешних подключений. Похоже, это:подключиться к mysql через php с pdo

<?php 

/* Servers configuration */ 
$i = 0; 

/* Server: localhost [1] */ 
$i++; 
$cfg['Servers'][$i]['verbose'] = 'localhost'; 
$cfg['Servers'][$i]['host'] = 'localhost'; 
$cfg['Servers'][$i]['port'] = '8000'; 
$cfg['Servers'][$i]['socket'] = ''; 
$cfg['Servers'][$i]['connect_type'] = 'http'; 
$cfg['Servers'][$i]['extension'] = 'mysqli'; 
$cfg['Servers'][$i]['auth_type'] = 'http'; ////I've also try with config here 
$cfg['Servers'][$i]['user'] = 'xxxx'; 
$cfg['Servers'][$i]['password'] = 'xxxxx'; 
$cfg['Servers'][$i]['AllowNoPasswordRoot'] = true; 

?> 

мой файл PHP выглядит так:

function connect() { 
    global $pdo; 
    $pdo = new PDO("mysql:host=localhost:8000;dbname=sakila", "xxxx", "xxxxxx"); 
} 

function get_actors_by_last_name($letter){ 
    global $pdo; 

    $stmt = $pdo->prepare(' 
     SELECT actor_id, first_name, get_actors_by_last_name 
     from actor 
     where first_name like :letter 
     limit 50'); 


    $stmt->execute( array(':letter' => $letter . '%')); 


    return $stmt->fetchAll(PDO::FETCH_OBJ); 

} 

?> 

страница простая форма, предполагают, чтобы принести имена актеров в зависимости от первой буквы своего имени. Каждый раз, когда вы пытаетесь заставить его работать со страницей при загрузке, не приносите мне ничего, не проблема или исключение. если изменить параметр хоста и поместить значение имени хоста, который использует мой MySQL, как это (в реальном коде реальной стоимости хоста):

$pdo = new PDO("mysql:host=mysql.value;dbname=sakila", "xxxx", "xxxxxx"); 

я получаю это сообщение:

Фатальная ошибка: неперехваченным исключение «PDOException» с сообщением «SQLSTATE [HY000] [1130] Хосту« xxxx »не разрешено подключаться к этому серверу MySQL« в /Users/josecarro/Desktop/jquery/ajax/dataBase/functions.php:13 Трассировка стека: # 0 /Users/josecarro/Desktop/jquery/ajax/dataBase/functions.php(13): PDO -> __ construct ('mysql: host = MacB ...', 'xxxx', 'xxxx', NULL) # 1 /Users/josecarro/Desktop/jquery/ajax/dataBase/index.php(7): connect() # 2 {main} брошен в /Users/josecarro/Desktop/jquery/ajax/dataBase/functions.php on line 13

, что заставляет меня думать, что на самом деле расширение pdo работает. Чтобы открыть сервер и использовать эту строку на терминале в каталоге, где мои файлы:

open http://localhost:8000 && python -m SimpleHTTPServer 

и в тот же каталог, я начинаю с PHP

php -S localhost:8000 

Я не знаю, Что проблема. Хотя я считаю, что у меня есть pdo, я попытался установить его с phpbrew (на всякий случай), установив еще одну версию php (7.0.7). Но я получаю акции, когда я пытаюсь установить расширения с

phpbrew ext install pdo-mysql 

На самом деле я действительно не знаю, какого черта я делаю. Я видел в документации PHP, что вы должны компилировать так:

--with-pdo-mysql[=DIR] 

Я не знаю, что делает это значит ... Я довольно потерял, как вы можете видеть. Я думаю, что его, наверное, проще, чем я думаю, но я не знаю, как это сделать, что измениться. ПОМОГИ ПОЖАЛУЙСТА!!!

+0

Вы запутанная HTTP порт с портом базы данных –

+0

вы говорите о файле PHP? на линии pdo? мне нужно снять порт и просто поставить «host = localhost;» ? – Chema

ответ

0

Есть несколько изменений, которые я хотел бы сделать здесь. Вместо того чтобы иметь свой PDO в качестве функции, создайте новую страницу под названием «connection.php» и включите ее на любую страницу, где вам нужно подключиться.EX:

<?php 
    try{ 
    $pdo= new PDO("mysql:dbname=NAME; host=localhost; charset=utf8", "username", "password"); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    }catch(PDOException $e) 
{ 
echo "Error: " . $e->getMessage(); 
} 

    ?> 

Чтобы включить страницу:

include('connection.php'); 

или

require_once('connection.php'); 

Изменение

return $stmt->fetchAll(PDO::FETCH_OBJ); 

в

$result[] = $stmt->fetchAll(PDO::FETCH_ASSOC); 

Затем повторите каждый результат в цикле foreach, в зависимости от того, сколько внешних массивов у вас есть до набора результатов, вам может понадобиться 1-2 цикла foreach.

EX:

foreach($result as subResult){ 
    foreach($subresult as $rows){ 
     echo $rows['actor_id']; 
     //or do a var_dump($rows); 
    } 

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