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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でDBの特定列をUpdate
-
VB.NET エラーになる箇...
-
mysqliを使ってデータベースを...
-
一度検索されたものに対するソ...
-
PHPでMySQLのテーブルからcount...
-
MYSQL UPDATE
-
PHPからデータベースに接続した...
-
MySQLにmd5が登録できません。
-
ResultSetインターフェイスでの...
-
spl拡張子保存
-
insert1つの処理でもトランザ...
-
VBAをつかってクエリの情報を抽...
-
PHP+MYSQL IF文の初歩
-
Resource id #3 をフィールドの...
-
実行時エラー3131 FROM 句の構...
-
PHPのプルダウンメニューにDBの...
-
MySQLでデータベースにデータin...
-
ヒアドキュメントでSQLを書く事...
-
zend(phpフレームワーク)でトラ...
-
select文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
insert1つの処理でもトランザ...
-
Pro*Cの構文エラー
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
VB.NET エラーになる箇...
-
MySQLのINSERT時にたまに重複に...
-
一度検索されたものに対するソ...
-
ResultSetインターフェイスでの...
-
チェックボックスからの複数検...
-
PHP初心者です。syntax error, ...
-
PHP+SQLite でSELECT文のWHERE...
-
エクセルVBAのデータベース接続...
-
PHPよりMySQLの操作のコードの...
-
phpで複数の検索語を検索対象に...
-
php MySQL で、更新ボタンを押...
-
VBA ACCESS SQL...
-
C#でDBの特定列をUpdate
-
PHP&MySQLでの文字列+数列の一...
-
データベースに存在するデータ...
-
ASPでSQL文を使う場合に。
おすすめ情報
すみません。
書いてませんでしたが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などで別ページを用意して表示させるのでしょうか?