Mysql
 sql >> Database >  >> RDS >> Mysql

Davvero alle prese con CONCAT_WS ... per favore aiuta un principiante :)

La prima cosa che posso vedere è il tuo sprintf() ha due parametri di sostituzione ma un solo segnaposto. Sto pensando che in realtà intendevi

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

Inoltre, il tuo GetSQLValueString() la funzione avvolge automaticamente i parametri "testo" tra virgolette, quindi è necessario rimuovere le virgolette attorno ai segnaposto.

Ho anche cambiato il segnaposto ID in %d come presumo che ti aspetti un numero.

Potresti trarre vantaggio dall'abilitazione della segnalazione degli errori per lo sviluppo. Questo errore (e potenzialmente un altro relativo all'indefinito $Notes variabile) avrebbe facilitato il debug.

Posizionalo nella parte superiore del tuo script (solo per lo sviluppo)

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

Crociata personale

Rilascia la libreria MySQL e sposta il tuo codice su PDO, non guarderai indietro.

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

Un approccio migliore

Prendi in considerazione la possibilità di archiviare ogni voce di nota in una tabella separata con una relazione di chiave esterna con il "Lead" principale e il timestamp di creazione. In questo modo, recuperi semplicemente tutte le voci della nota figlio nell'ordine di creazione e le nuove voci vengono semplicemente inserite.

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;