Ir ao conteúdo

PHP Porque o minha instrução WHERE não está funcionando?


Ir à solução Resolvido por DiF,

Posts recomendados

Postado
##index.php

define('DB_HOSTNAME', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', null);
define('DB_CHARSET', 'utf8');

define('DB_DATABASE', 'publicacoes');

$conn = new PDO('mysql:host=' . DB_HOSTNAME . ';dbname=' . DB_DATABASE . ';charset=' . DB_CHARSET . ';', DB_USERNAME, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$isPost = !empty($_GET['post']);
$slug =  'home';
if ($isPost) {
    $slug = $_GET['post'];
} elseif (!empty($_GET['p'])) {
    $slug = $_GET['p'];
}
try {
    $stmt = $conn->prepare('SELECT `title`, `text`, `capa`, `alt`, `slug` FROM bn_publicacao WHERE `slug` = :slug AND `entry_type` = :entry_type'); 
    $stmt->execute([
        ':entry_type' => $isPost ? 'post' : 'pagina', 
        ':slug' => $slug
    ]);
    if (!$UN = $stmt->fetch(\PDO::FETCH_ASSOC)) {
        
        throw new \InvalidArgumentException('Post title ' . htmlentities($title, \ENT_QUOTES, 'UTF-8', false) . ' not found in database');
    }
    
    $titulo = $shareTitulo = $UN['title'];
    $descricao = $shareDescricao = $UN['text'];
    $ogUrl = $urlCanonico = $UN['capa'];
    $imgAlt = $UN['alt'];
    
    $slug = $UN['slug']; 
    
    
    $keywords = $shareImge = '';
} catch (\InvalidArgumentException $e) {
    header('Location: index.php?p=home'); 
    exit;
} catch (\Exception $e) {
    throw $e;
}

function sanitize($data, $filter = \FILTER_SANITIZE_STRING) {
    if ($data = filter_var(trim($data), $filter)) {
        $data = preg_replace('/http(s)?:\/\//', '', $data);
    }
    
    return $data;
}

$loadPage = null;
if ($sanitizedName = sanitize($isPost ? $titulo : $slug)) {
    $loadPageSuffix = ($isPost ? '/posts/' : '/page_');
    $loadPage =  __DIR__ . $loadPageSuffix . $sanitizedName . '.php';
}
if (null === $loadPage || !is_file($loadPage)) {
    header('HTTP/1.1 404 Not Found'); 
    exit;
}


 $pages = $conn->query('SELECT title, slug FROM bn_publicacao WHERE "entry_type" = "pagina"')
     ->fetchAll(\PDO::FETCH_NUM); 
?>

<!DOCTYPE html>
<html>
<head><title><?php echo htmlentities($titulo, \ENT_QUOTES, 'UTF-8', false); ?></title>
</head>
<body>
    <?php foreach($pages as list($pageTitle, $pageSlug)) { ?>
    <li>
        <a href="?p=<?php echo htmlentities($pageSlug, \ENT_QUOTES, 'UTF-8', false); ?>"><?php echo htmlentities($pageTitle, \ENT_QUOTES, 'UTF-8', false); ?></a>
    </li>
    <?php } ?>

<?php require_once $loadPage; ?>

</body>
</html>
## page_home.php

<?php

    $stmtIDrow1 = 'SELECT * FROM bn_publicacao WHERE "entry_type" = "post"';
    $IDrow1 = $conn->query($stmtIDrow1)->fetchAll();

     ?>

    <?php foreach ($IDrow1 as $IDr1) { ?>
      <a href="index.php?post=<?php echo htmlentities($IDr1['slug'], \ENT_QUOTES, 'UTF-8', false); ?>"><h2><?php echo htmlentities($IDr1['title'], \ENT_QUOTES, 'UTF-8', false); ?></h2></a>
    <?php } ?>

Só está carregando o header e o footer da página, não mostra nenhum erro na página, simplesmente não imprime os registros do Banco de dados, a página fica em branco, só com o header e o footer, já se eu tirar essa parte do código 'WHERE "entry_type" = "post"/"pagina"' os registros são imprimidos normalmente, mas não é assim que ele deve funcionar...

 

Como resolvo isso? Não consegui encontrar o erro.

 

Para sanar qualquer duvida sobre o meu Banco de dados, eu vou deixar duas imagens da minha tela com amostra do meu atual Banco de dados.

 

1378421186_CapturadeTela(193).thumb.png.70623bfb82547660d70a4a561fc4251a.png1378421186_CapturadeTela(193).thumb.png.70623bfb82547660d70a4a561fc4251a.png

Captura de Tela (194).png

  • Moderador
  • Solução
Postado

@unknn Olá,

não aparece com o where porque parece estar errado.

 

Não se usa aspas duplas ou simples no nome do campo.

 

Ao meu ver o correto seria:

 $stmtIDrow1 = 'SELECT * FROM bn_publicacao WHERE entry_type = "post"';

 

  • Curtir 1
Postado
5 horas atrás, DiF disse:

@unknn Olá,

não aparece com o where porque parece estar errado.

 

Não se usa aspas duplas ou simples no nome do campo.

 

Ao meu ver o correto seria:


 $stmtIDrow1 = 'SELECT * FROM bn_publicacao WHERE entry_type = "post"';

 

Era isso mesmo, valeu!

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!