「教えて!ピックアップ」リリース!

$sql = 'select count(*) as cnt from テーブル名';
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
echo $row['cnt'];

function table_col($str) {
$sql = 'select count(*) as cnt from '.$str;
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
return $row['cnt'];
}

こちらでテーブルに入っているデータの総数を調べることができるのですが、
下記のように書き換えるとエラーが出てきます。$dsnの部分が間違っているようですが、修正法が書いてあるサイトにはmysqli_query($con, $sql);
$con = mysqli_connect('ホスト名','ユーザー名','パスワード');のように修正されております。
自身のサイトでは$dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost';と記載しているのでそちらを使おうと思ったのですが、駄目なのでしょうか?

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in /home/hlxclitx/public_html/wp-content/themes/sample_theme/index.php on line 366

Warning: mysqli_fetch_assoc() expects exactly 1 parameter, 2 given in /home/hlxclitx/public_html/wp-content/themes/sample_theme/index.php on line 367


$sql = 'select count(*) as cnt from rss_feed';
$res = mysqli_query($dsn, $sql);
$row = mysqli_fetch_assoc($dsn,$res);
echo $row['cnt'];

※全文はこちらです。
<?php

try {
$dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost';
$user = 'hlxclitx_wp1';
$password = 'E.HrypHWxNmltXgC5eS26';
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //エラーが発生した時に、例外を投げる
echo 'データベースへの接続が出来ました';

//RSSをまとめる
$url1 = [
'http://blog.livedoor.jp/dqnplus/index.rdf',
'http://alfalfalfa.com/index.rdf',
'http://himasoku.com/index.rdf',
];
// insertの準備
$stmt = $dbh->prepare('insert into rss_feed (title, link, date) values (?, ?, ?) on duplicate key update title=?, link=?, date=?');
// URLのループ開始 テーブルに格納
foreach ($url1 as $url) {
if (($rss = @simplexml_load_file($url)) === false) {
continue;
}
foreach ($rss->item as $item) {
$title = $item->title;
$link = $item->link;
$dc = $item->children('http://purl.org/dc/elements/1.1/');
$date = date('Y-m-d H:i:s', strtotime($dc->date));
$stmt->execute([$title, $link, $date, $title, $link, $date]);
}
}

$sql = 'select count(*) as cnt from rss_feed';
$res = mysqli_query($dsn, $sql);
$row = mysqli_fetch_assoc($dsn,$res);
echo $row['cnt'];

//古いデータを削除
$sql = 'DELETE FROM rss_feed WHERE date < ?';
$stmt = $dbh->prepare($sql);
$date = date('Y-m-d H:i:s', strtotime('-1 week'));
$stmt->execute([$date]);
} catch (PDOException $e) {
echo $e->getMessage(); // err時はメッセージを表示
exit;
}
?>

A 回答 (3件)

PHP7ではもうmysql_*関数は廃止されています


PDOなど一般的なやり方にシフトしてください
    • good
    • 0
この回答へのお礼

了解いたしました。
http://weble.org/2010/01/02/php-mysql-table-col
https://lpeg.info/webworks/server_moving_mysqli. …
mysqliに変換する方法もあったのですが、その場合$dsnが間違っているのでしょうか?
勉強のためにお聞きしておきたいです…
$sql = 'select count(*) as cnt from rss_feed';
$res = mysqli_query($dsn, $sql);
$row = mysqli_fetch_assoc($dsn,$res);
echo $row['cnt'];

お礼日時:2022/01/26 16:32

知識が乏しいなら余計にmysqli関数はやめてPDOをおすすめします


WEB上のナレッジサイトも情報量が違います。
    • good
    • 0
この回答へのお礼

了解いたしました。PDOのほうで$titleの数を取得してみます。アドバイスありがとうございます。

お礼日時:2022/01/26 17:16

$link = mysqli_connect("localhost", "my_user", "my_password", "world");


$result = mysqli_exec($link, $sql);
while ($row = mysqli_fetch_assoc($result)){
・・・

みたいな感じでは?
    • good
    • 0
この回答へのお礼

勉強不足で申し訳ないのですが、while ($row = mysqli_fetch_assoc($result)){の後述がわかりません…
下記のようにしてRSSで1ページあたりの数を制限したい場合、どのような構想になるのでしょうか?
データベースから$titleの数をmysqli_fetch_assocで取得して、total数と1ページあたりの数を使いコンテンツの重複を避けるよう考えております。

$perPage = 36; // 1ページあたりのデータ件数
//「URLのパラメータにpageが存在しない場合」「pageが0以下」「pageがトータルページを超えている場合」に1ページ目を表示するように処理しています。9行目では悪意のある値を受け付けないように数値にキャスト(変換)しています。
$totalPage = 10; // 最大ページ数
if (
isset($_GET["page"]) &&
$_GET["page"] > 0 &&
$_GET["page"] <= $totalPage
) {
$page = (int)$_GET["page"];
} else {
$page = 1;
}
$page = (int) $_GET['page'];//現在のページ番号

お礼日時:2022/01/26 17:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング