WHERE语句不适用于我的代码,为什么?

时间:2018-09-19 16:51:14

标签: php database where

##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 } ?>

它没有从我的数据库中打印出记录,并且在屏幕上没有显示任何错误。仅当我取出WHERE语句时才打印记录,但是我的代码中确实需要此WHERE。我的代码有什么问题?我找不到代码中的错误。

我该如何解决?

这是我的数据库的两个打印屏幕:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

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