質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

【PHP】Fatal errorの原因がわからず

解決済

回答 2

投稿

  • 評価
  • クリップ 2
  • VIEW 1,951

kuzurotto

score 403

$sql = "SELECT * 
FROM entry 
WHERE CONCAT(title,description,area,price,conditions) 
LIKE '%77%'
ORDER BY id DESC
LIMIT ? , 5";
$stmtSearch = $pdo->prepare($sql);
$stmtSearch->execute([$start]);

に対して

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''0' , 5' at line 6' in C:\xampp\htdocs\development\test\property_list.php:43 Stack trace: #0 C:\xampp\htdocs\development\test\property_list.php(43): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\development\test\property_list.php on line 43

のエラーがでていて解決できずです...

$stmtSearch = $pdo->prepare($sql);
$stmtSearch->bindValue(1, $start, PDO::PARAM_INT);
$stmtSearch->execute();

ならエラーなしです。

LIKE '%77%'の77もバインドさせたいんですがどうすればよいでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kunai

    2016/08/17 17:30

    $startには何が入ってますか?

    キャンセル

  • kuzurotto

    2016/08/17 17:35

    こうなっています。
    $page = (INT)filter_input(INPUT_GET, 'page');
    $start = $page * 5;

    キャンセル

回答 2

+1

PDOのexecuteで値を割り当てる場合、

すべての値は PDO::PARAM_STR として扱われます(PHPマニュアルより)。

整数をbindする場合は、事前にbindValue()などで割り当てておく必要があります(なお、MySQLでは、INSERTなどで整数型のものに文字列としてbindしても動いてしまいますが、LIMITの場合はそうは行きません)。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

<?php

$sql = "SELECT *
FROM entry
WHERE (
    title LIKE :patturn
    OR description LIKE :patturn
    OR area LIKE :patturn
    OR price LIKE :patturn
    OR conditions LIKE :patturn
)
ORDER BY id DESC
LIMIT :start, 5";
$stmtSearch = $pdo->prepare($sql);
$arr = array();
$patturn = '%' . preg_replace('/(?=[!_%])/', '!', $pattrun) . '%';
$stmtSearch->bindParam(':patturn', $patturn, PDO::PARAM_STR);
$stmtSearch->bindParam(':start', $start, PDO::PARAM_INT);
$stmtSearch->execute();

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 17:56

    すいません。

    $stmtSearch->bindParam(':patturn', '%' . preg_replace('/(?=[!_%])/', '!', $pattrun) . '%', PDO::PARAM_STR);

    に対して

    Fatal error: Cannot pass parameter 2 by reference in C:\xampp\htdocs\development\test\property_list.php on line 47

    のエラーがでるのですがこれはLIKEのプレースで複数:patturnを記述しているからでしょうか?

    キャンセル

  • 2016/08/17 18:11

    質問の意味がよくわからないのですが。

    キャンセル

  • 2016/08/17 18:28

    回答を修正しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る