Arquivo da categoria: PHP

Como saber o dia, mês, ou o ano de uma data específica usando PHP?

Este código permite ajustar qual o formato de entrada utilizando a mascara ‘d/m/Y’:

<?
echo DateTime::createFromFormat('d/m/Y', '25/12/2016')->format('d'); // Dia
echo DateTime::createFromFormat('d/m/Y', '25/12/2016')->format('m'); // Mês
echo DateTime::createFromFormat('d/m/Y', '25/12/2016')->format('Y'); // Ano (4 digitos)
?>

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:xampphtdocscode.php on line XXX

Este problema na maioria das vezes é causado por uma consulta incorreta, desta forma ela não está podendo retornar dados e montar o recordset.

Imprima a consulta que você está tentando realizar utilizando o comando echo (no PHP) e execute-a no banco de dados através de um aplicativo como o phpMyAdmin, HeidiSQL, etc.

No meu caso, o erro da consulta foi a falta de uma virgula entre os campos que eu estava tentando consultar (d.Code e d.Title):

SELECT
    d.Code
    d.Title
FROM
    document d
    INNER JOIN project p ON (d.ProjectID = p.ID)
WHERE
    p.Code = 'cf23df2207d99a74fbe169e3eba035e633b65d94'

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:xampphtdocscode.php on line XXX

Este problema na maioria das vezes é causado por uma consulta incorreto, desta forma ela não está podendo retornar dados e montar o recordset.

Imprima a consulta que você está tentando realizar e execute-a no banco de dados através de um aplicativo como o phpMyAdmin, HeidiSQL, etc.

No meu caso, o erro da consulta foi a falta de uma virgula entre os campos que eu estava tentando consultar (d.Code e d.Title):


SELECT
d.Code
d.Title
FROM
document d
INNER JOIN project p ON (d.ProjectID = p.ID)
WHERE
p.Code = 'cf23df2207d99a74fbe169e3eba035e633b65d94'

Como habilitar o uso de Tags curtas do PHP (short tags, short open tag) ? Utilizando “<?” ao invés de “<?php”

O que são tags curtas no PHP? É a possibilidade de iniciar um código php utilizando  “<?” ao invés de “<?php”.

Como habilitar este recurso?

Edite o arquivo php.ini, e atribua o valor ON ao atributo abaixo:


short_open_tag=On

Reinicie o servidor web.

OBS: Se não funcionar, é provável que em outrou local do php.ini exista o código short_open_tag=Off desabilitando as tags curtas. Faça uma pesquisa em todo arquivo para verificar.

Required_Once vs Call to undefined function

Ao tentar utilizar um script PHP em um novo servidor Apache + PHP, ele não conseguia utilizar uma função que estava incluída em um outro arquivo PHP.

require_once ‘./System/Functions/DB/DB_openDatabase.fnc.php’;

informava o seguinte erro:

Fatal error: Call to undefined function DB_openDatabase() in C:xampphtdocs1.php on line 35

O problema é que o servidor não estava configurado para aceitar Short Open Tags (<? ?>), e considerava scripts PHP apenas os iniciados pelos tags (<?php ?>). Como todos meus scripts são iniciados pela forma curta, acontecia o erro.

Para resolver este problema, adicione ao PHP.INI o comando “short_open_tag = on”

Comando num_rows do MySQLi (prepared statement) retorna apenas o valor 0

Continuando os meus trabalhos de conversão de um código que utilizava a conexão MySQl para a conexão MySQLi encontrei um novo problema: o comando num_rows sempre retornava o valor 0, mesmo nas consultas em que eu sabia que traziam mais resultados:

$lobj_mysqliQuery = $pobj_DBObject->stmt_init();
$lobj_mysqliQuery->prepare("SELECT id FROM usuario WHERE nome like ?");
$lobj_mysqliQuery->bind_param("s", $plstr_usuarioNome);
$lobj_mysqliQuery->execute();

$llng_usuarioQuantidade = $lobj_mysqliQuery->num_rows;

Bem, onde estava o erro? Aparentemente (novamente) estava tudo correto. Porém, o MySQLi tem uma forma diferente de ver a vida…:)

O erro estava na ausência da utilização do comando store_result(). Que, segundo o manual do PHP, serve para transferir o resultado da última consulta (Resultset) para a variável desejada. Assim, como não havíamos executado este comando, era como se estivéssemos tentando pegar o número de linhas de um ResultSet vazio.

o código final ficou assim, e funcionou:

$lobj_mysqliQuery = $pobj_DBObject->stmt_init();
$lobj_mysqliQuery->prepare("SELECT id FROM usuario WHERE nome like ?");
$lobj_mysqliQuery->bind_param("s", $plstr_usuarioNome);
$lobj_mysqliQuery->execute();
$lobj_mysqliQuery->store_result();

$llng_usuarioQuantidade = $lobj_mysqliQuery->num_rows;

* Observação: Nestes exemplos estão ocultos os comandos responsáveis por abrir e fechar a conexão com o banco de dados.