sql >> データベース >  >> RDS >> Mysql

本当にCONCAT_WSと格闘しています...初心者を助けてください:)

    私が最初に見ることができるのはあなたのsprintf()です 2つの置換パラメーターがありますが、プレースホルダーは1つだけです。私はあなたが実際に意味したと思います

    $updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', Notes, %s) WHERE Id=%d",
        GetSQLValueString($_POST['note'], "text"),
        GetSQLValueString($_POST['Id'], "int"));
    

    また、GetSQLValueString() 関数は「テキスト」パラメータを自動的に引用符で囲むため、プレースホルダーの周りの引用符を削除する必要があります。

    また、IDプレースホルダーを%dに変更しました 私はあなたが数を期待していると思います。

    開発用のエラーレポートを有効にすると、メリットが得られる場合があります。このエラー(および未定義の$Notesに関する別のエラーの可能性があります 変数)はデバッグを容易にします。

    これをスクリプトの先頭に配置します(開発専用)

    ini_set('display_errors', 'On');
    error_reporting(E_ALL);
    

    個人の十字軍

    MySQLライブラリを削除してコードをPDOに移動すると、振り返ることはありません。

    $stmt = $db->prepare('UPDATE Leads SET Notes = CONCAT_WS(:sep, Notes, :note) WHERE Id = :id');
    $stmt->execute(array(
        'sep'  => PHP_EOL,
        'note' => $_POST['note'],
        'id'   => $_POST['Id']
    ));
    

    より良いアプローチ

    親の「リ​​ード」と作成タイムスタンプとの外部キー関係を使用して、各ノートエントリを個別のテーブルに保存することを検討してください。そうすれば、作成順にすべての子ノートエントリを取得するだけで、新しいエントリが挿入されるだけです。

    CREATE TABLE LeadNotes (
        id         INT NOT NULL AUTO_INCREMENT,
        lead_id    INT,
        note       TEXT,
        created_dt TIMESTAMP,
        PRIMARY KEY (id),
        FOREIGN KEY (lead_id) REFERENCES Leads (Id)
            ON DELETE CASCADE
    ) ENGINE=INNODB;
    



    1. 期待される結果を得るためにクエリまたは他のクエリを変更するのを手伝ってもらえますか

    2. Facebook登録コネクト

    3. 自動インクリメントIDを既存のテーブルに追加しますか?

    4. MySQL空間拡張を使用して、円内のポイントを選択します