Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ich habe wirklich Probleme mit CONCAT_WS ... bitte helfen Sie einem Neuling :)

Das Erste, was ich sehen kann, ist Ihr sprintf() hat zwei Substitutionsparameter, aber nur einen Platzhalter. Ich denke, Sie meinten tatsächlich

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

Auch Ihr GetSQLValueString() Funktion umschließt "Text"-Parameter automatisch mit Anführungszeichen, daher müssen Sie die Anführungszeichen um die Platzhalter entfernen.

Ich habe auch den ID-Platzhalter in %d geändert da ich annehme, dass Sie eine Zahl erwarten.

Sie können davon profitieren, die Fehlerberichterstattung für die Entwicklung zu aktivieren. Dieser Fehler (und möglicherweise ein weiterer bezüglich der nicht definierten $Notes Variable) hätte das Debuggen einfacher gemacht.

Platzieren Sie dies am Anfang Ihres Skripts (nur für die Entwicklung)

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

Persönlicher Kreuzzug

Löschen Sie die MySQL-Bibliothek und verschieben Sie Ihren Code nach PDO, Sie werden nicht mehr zurückblicken.

$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']
));

Ein besserer Ansatz

Erwägen Sie, jeden Notizeintrag in einer separaten Tabelle mit einer Fremdschlüsselbeziehung zum übergeordneten „Lead“ und dem Erstellungszeitstempel zu speichern. Auf diese Weise rufen Sie einfach alle untergeordneten Notizeinträge in der Erstellungsreihenfolge ab und neue Einträge werden einfach eingefügt.

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;