Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

sEnte

Não dá output de erro mesmo com nome de DB mal escrito

Mensagens Recomendadas

sEnte    0
sEnte

Muito resumidamente instalei recentemente um web server na minha máquina e instalei NGINX, MariaDB 10.0.5 e o phpMyAdmin

Agora estou para começar um sistema de login com o mysqli. Atualmente só tenho isto um index.php e um connect.php que está dentro de uma pasta, db.

dentro do index.php tenho só isto

<?php
error_reporting(E_ALL);
require 'db/connect.php';
?>

e no connect.php isto

<?php
$db = new mysqli('127.0.0.1', 'username', 'password', 'penz');
?>

Só naquela de experimentar dei o nome de pen à minha db, o que acontece é que se usar pen como nome da db não aparece nada como é suposto mas se meter como penz em vez de pen deveria dar-me este erro

Warning:mysqli::mysqli(): (HY000/1049): Unkown database 'penz' in path\of\the\folder\db\connect.php on line 2

mas não dá rigorisamente nada.

No terminal experimentei isto mysql -u root -p'' depois escrevi SHOW DATABASES e apareceu as DBs, se usar USE pen; consigo aceder à db, se meter penz em vez de pen dá erro como era de esperar.

Porque raio através do terminal consigo aceder à db e através do ficheiro php não?

Mais infos aqui

http://stackoverflow.com/questions/19941272/even-with-a-misspelled-db-name-it-wont-outsput-errors


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

escreve no início do teu script de PHP as seguintes instruções:

error_reporting(E_ALL);
ini_set('display_errors', 1);

e diz se continua a não apresentar erro

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

Há novidades :)

Agora tenho isto :S

Warning: mysqli::mysqli(): Headers and client library minor version mismatch. Headers:50532 Library:100005 in /usr/share/nginx/www/mysqli/db/connect.php on line 3 Warning: mysqli::mysqli(): (28000/1045): Access denied for user 'username'@'localhost' (using password: YES) in /usr/share/nginx/www/mysqli/db/connect.php on line 3

Sou um bocado nabo nas permissões mas um colega meu que usa Linux deu-me isto para meter

chown -R youruser:www-data /usr/share/nginx/www/

find /usr/share/nginx/www -type d -exec chmod 755 {} +

find /usr/share/nginx/www -type f -exec chmod 644 {} +

Por acaso só experimentei o primeiro mas chmod :S

Editado por sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

adicionando isto

/* activate reporting */
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ALL;

deixa de aparecer qualquer erro

e sim uso as minhas credenciais para na função de ligação, só alterei para meter aqui

Com este código

if($db->connect_errno) {
 echo $db->connect_error;
}

Realmente aparece Unkown database 'penz'. Se o tirar deixa de aparecer qualquer erro :S Não deveria aparecer na mesma?

Editado por sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

Isto é para ser oop e não PDO :)

agora estou com outro problema : OMG

se meter

$rows = $result->fetch_assoc();

mostra-me um dos resultados da db (e tenho lá 2). Se mudar para

$rows = $result->fetch_all();

deixa de me mostrar seja o que for :S

Editado por sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
I-NOZex    146
I-NOZex

moç, disseste ai um contra-senso total...

é para ser object oriented programming e nao PHP DATABASE OBJECT

tudo bem que teem suporte a uma escrita processual, mas mysqli e PDO sao mais virados para o OO


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
I-NOZex    146
I-NOZex

e PDO é o que amigo? :D

dai dizer que foi um contra-senso

pdo é uma classe de ligaçao a base de dados, nao so mysql, mas tambem sqllite, entre varios outros , e está sob a forma O.O

tal como o nome indica PDO = PHP DATA OBJECTs :thumbsup:

http://www.php.net/manual/pt_BR/book.pdo.php

Editado por I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
yoda    138
yoda

Um exemplo de uma query em PDO :

// $dbh = database handler

$query = $dbh->prepare('SELECT * FROM test_table WHERE id = :id');

$query->bindValue(':id', 1, PDO::PARAM_INT);

$query->execute();

$result = $query->fetchAll(PDO::FETCH_OBJ);

if (count($result) > 0)
{
   foreach($result as $r)
   {
       echo $r->name;
   }
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

Sim isso eu sei :) mas este não usa PDO

o que tenho é simplesmente isto

<?php
//error_reporting(0);
require 'db/connect.php';
if ($result = $db->query("SELECT * FROM people")) {
 if ($count = $result->num_rows) {
  //echo '<p>', $count ,'</p>';
  while ($row = $result->fetch_object()) {
echo $row->first_name, ' ', $row->last_name, '<br>';
  }
  $result->free();
 }
}
?>

Não sei se é a melhor maneira de fazer isto mas pronto. Até agora está só a buscar dados na DB, mas mais uma vez não mostra qualquer erro.

Mas de qualquer maneira estamos um bocado a fugir à ideia principal deste tópico que era saber porque é que isto não me está a dar output de erros :S Se calhar tenho de meter as opções todas as opções na parte referente ao error_reporting no ficheiro php.ini

Mais um edit lol

Opa já me estou a passar com isto. Por exemplo neste if

if (isset($_GET['last_name'])) {
 $last_name = trim($_GET['last_name']);
 $people = $db->prepare("SELECT first_name, last_name FROM people WHERE last_name = ?");
 $people->bind_param('s', $last_name);
 $people->execute();
 print_r($people);
}

O print_r() não me mostra qualquer resultado :S

Editado por sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

Se eu meter antes do If não me vai aparecer nada porque a única coisa que tenho é

require 'db/connect.php';


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

o que tenho no URI ou URL é

http://127.0.0.1/mysqli/?last_name=Smith

De qualquer maneira não aparece nada :S

Editado por sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

Disse no tópico inicial mas sim é em Linux e instalei NGINX, MariaDB 10.0.5 e o phpMyAdmin

Parece que a minha versão do php é a 5.3.10 :S

Editado por sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

depois de fazer um sudo nano a isso só me dá isto...

013/11/14 16:50:30 [error] 1708#0: *250 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected T_IF in /usr/share/nginx/www/mysqli/index.php on line 6" while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET /mysqli/?last_name=Garrett HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1"

2013/11/14 16:50:31 [error] 1708#0: *250 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected T_IF in /usr/share/nginx/www/mysqli/index.php on line 6" while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET /mysqli/?last_name=Garrett HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1"

2013/11/14 16:50:33 [error] 1708#0: *250 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected T_IF in /usr/share/nginx/www/mysqli/index.php on line 6" while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET /mysqli/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1"

2013/11/14 21:12:50 [error] 1710#0: *4 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '}' in /usr/share/nginx/www/mysqli/index.php on line 12" while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET /mysqli/?last_name=Garrett HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1"

2013/11/14 21:12:51 [error] 1710#0: *12 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '}' in /usr/share/nginx/www/mysqli/index.php on line 12" while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET /mysqli/?last_name=Garrett HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1"

2013/11/14 21:13:04 [error] 1710#0: *12 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '}' in /usr/share/nginx/www/mysqli/index.php on line 12" while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET /mysqli/?last_name=Smith HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1"

2013/11/14 21:13:05 [error] 1710#0: *4 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '}' in /usr/share/nginx/www/mysqli/index.php on line 12" while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET /mysqli/?last_name=Smith HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1"

2013/11/14 21:23:40 [error] 1705#0: *1 FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '}' in /usr/share/nginx/www/mysqli/index.php on line 12" while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET /mysqli/?last_name=Smith HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1"

Comecei tudo de novo.

Aqui vai

Esta é a minha tabela.

CREATE TABLE IF NOT EXISTS `people` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `first_name` varchar(25) NOT NULL,
 `last_name` varchar(25) NOT NULL,
 `bio` text NOT NULL,
 `created` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

depois inseri uns dados.

INSERT INTO `app`.`people` (`id`, `first_name`, `last_name`, `bio`, `created`) VALUES (NULL, 'Alex', 'Smith', 'I\'m a web developer', NOW()), (NULL, 'Billy', 'Smith', 'I\'m Alex''s Brother', NOW());

Vou começar a ligar à db

<?php

$db = new mysqli('127.0.0.1', 'root', '', 'app');

?>

como meti o nome da db bem não deu problemas, agora se meter mal no log dá-me isto

PHP message: PHP Warning: mysqli::mysqli(): (42000/1049): Unknown database 'appz' in /usr/share/nginx/www/mysql/db/connect.php on line 3"

mas na página não aparece nada, aprece que está desligado os erros. Tal como o print_r() que não me aparece nada :S

No php.ini está isto

rror_reporting = E_ALL & ~E_DEPRECATED

Já agora foram estes os tutoriais que seguir para instalar NGINX e phpMyAdmin

http://www.digitalocean.com/community/articles/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-12-04 e http://www.digitalocean.com/community/articles/how-to-install-phpmyadmin-on-a-lemp-server/ Para o MariaDB foi este http://blog.justin.kelly.org.au/migrate-mysql-to-mariadb-in-ubuntu-12-dot-10/ Como não tinha MySQL instalado substitui a parte do MySQL pelo MariaDB e tudo o resto foi só seguir o tutorial. Depois de tudo instalado fiz duas coisas, primeira

chown -R youruser:www-data /usr/share/nginx/www/
find /usr/share/nginx/www -type d -exec chmod 755 {} +
find /usr/share/nginx/www -type f -exec chmod 644 {} +

substitui o youruser pelo meu user e pronto.

A segunda coisa foi aceder ao phpMyAdmin através de 127.0.0.1/phpmyadmin e dava-me um erro a dizer que a extensão mysqli não podia ser encontrada :S estive a ler o forum e vi este comentário

Fixed it by commenting this line on php.ini

> mysqli.allow_local_infile = On

e realmente depois de fazer reset oa nginx e fpm lá consegui acerder ao phpmyadmin

Esqueci-me de dizer. Na altura instalei a versão 10.0 do MariaDB, poucos duas depois apareceu uma atualização para 10.0.5 mas tive problemas em instalar porque estava sempre a dizer que havia dependências em falta Tive de tentar várias vezes com sudo apt-get -f upgrade para ele me instalar as dependências do MariaDB que era a única coisa que tinha para fazer update

Editado por sEnte

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Devexz    47
Devexz

é normal na página não aparecer nada porque o servidor está configurado para não fazer outputs na própria página do PHP e sim mandar os erros para o ficheiro log.

Já editaste o ficheiro php.ini?


Ás vezes, mais vale deixar a assinatura em branco.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
sEnte    0
sEnte

Mas o php.ini na parte do error_reporting tem E_ALL & ~E_DEPRECATED e é o que está por defeito. Nisso eu nem sequer toquei.


"If It Ain't Broke, Break it and build something Cooler!" Unknown

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

eu já te dei o código para fazer aparecer os erros

nota que se os erros forem de sintaxe (PHP mal escrito) o engine de PHP estoira e não aparece nada no janela do browser


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.