![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
cronジョブを試しています。
sqlでdayというカラムに30があるので3分ごとにdayからー1をしてカウントダウンしたいです。
sqlエラーで文字列を変換できない。
とのエラーがありました。
Catchable fatal error: Object of class PDOStatement could not be converted to string in on line 22
おそらくday-1が悪いと思うのですが、方法が分かりません。
方法を教えてください。
try
{
$stmt=new PDO("mysql:host=localhost;dbname=hoge;charset=utf8mb4", 'hoge','hoge', [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION]);
} catch (PDOException $e) {
die('database error : ' . $e->getMessage());
}
$sql = "update diary set
day = day - 1
where id = '1'";
$row=$stmt->query($sql);
echo $row;//22行目はここです
No.4ベストアンサー
- 回答日時:
query() は結果セットを PDOStatement オブジェクトで返します。
https://www.php.net/manual/ja/pdo.query.php
PDOStatement は echo で単純表示できるものではありませんので、
何らかのメソッドなり foreach の仕組みで表示させてください。
補足を読む限り day の内容を表示したいようですが、
それならば UPDATE 後に別途 SELECT を実行して、
その結果セットの PDOStatement から
最初の行の 'day' 列の値を読み取ってください。
No.2
- 回答日時:
>day = day - 1
文字列を数値として扱うな!というエラーメッセージであることは理解できていますか?
動的SQLを使って明示的にCAST()/CONVERT()で-1すればエラーが消えるでしょう。
詳細は、
>Object of class PDOStatement could not be converted to string in on
でググればいくらでも情報を得られます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP PHP MySql ページング 2 2022/09/20 06:38
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- PHP PHPSpreadsheetによる書き出し時のページネーション方法について 1 2023/03/20 10:35
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- 英語 この英文は平易な反面格調高いですか? 1 2023/01/15 12:04
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<VB.NET>INSERT文でDBにデータ...
-
PHPのSQL文のデバッグ方法とコ...
-
Pro*Cの構文エラー
-
ASPでSQL文を使う場合に。
-
insert1つの処理でもトランザ...
-
データベースに存在するデータ...
-
ResultSetインターフェイスでの...
-
VBA ACCESS SQL...
-
like検索の複数キーワードで、...
-
CakePHPとMySqlを使用していま...
-
JAVA SQLServerException 列名 ...
-
エクセルVBAのデータベース接続...
-
一度検索されたものに対するソ...
-
自作の検索エンジンを作成しま...
-
配列に入ったデータをループを...
-
php mysql接続での書き方
-
SQL文の処理を関数化したいです
-
PHPの記述で値が取れません。
-
checkbokとキーワード検索を組...
-
【ASP.NET】MySQLのテーブルレ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
Pro*Cの構文エラー
-
Q&Aサイトを作成していてURLの...
-
ResultSetインターフェイスでの...
-
VBA ACCESS SQL...
-
データベースに存在するデータ...
-
VB.NET エラーになる箇...
-
insert1つの処理でもトランザ...
-
MySQLのINSERT時にたまに重複に...
-
INSERT,DELETEを同時に
-
like検索の複数キーワードで、...
-
PHP&MySQLでの文字列+数列の一...
-
mysqliを使ってデータベースを...
-
PHP初心者です。syntax error, ...
-
PHP+SQLite でSELECT文のWHERE...
-
php MySQL で、更新ボタンを押...
-
SQLインジェクション対策
-
phpでforeach ($stmt as $row)...
-
OR検索を実装したい
おすすめ情報
すみません。
書いてませんでしたがcronはちゃんと動いていました。
型が違うのは理解できました。(エラーの
しかし
dayはTINYINT型を使っています。
-1が文字列型として処理させてしまったのでしょうか?
ありがとうございました。 うまくいきました。
ちなみになんですけど、 updete文はqueryよりexecを使うほうがよいのでしょうか?
>PDOStatement は echo で単純表示できるものではありませんので、 何らかのメソッドなり foreach の仕組みで表示させてください。
$row=$stmt->query($sql);
echo $row;//22行目はここです
上記のような使い方をするくらいなら
while($row=$stmt->fetch())
の形のほうが良いということでしょうか?
cron対象のページをリロードすると何度も処理されてしまうのですが、
普通、file_get_contentsなどで別ページを用意して表示させるのでしょうか?