sql >> Base de Datos >  >> RDS >> Mysql

Realmente tengo problemas con CONCAT_WS ... por favor ayuda a un novato :)

Lo primero que puedo ver es tu sprintf() tiene dos parámetros de sustitución pero solo un marcador de posición. Estoy pensando que en realidad querías decir

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

Además, su GetSQLValueString() La función envuelve automáticamente los parámetros de "texto" con comillas, por lo que debe eliminar las comillas alrededor de los marcadores de posición.

También cambié el marcador de posición de ID a %d ya que asumo que estás esperando un número.

Puede beneficiarse al habilitar el informe de errores para el desarrollo. Este error (y potencialmente otro relacionado con las $Notes indefinidas variable) habría facilitado la depuración.

Coloque esto en la parte superior de su secuencia de comandos (solo para desarrollo)

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

Cruzada Personal

Suelta la biblioteca MySQL y mueve tu código a PDO, no mirarás hacia atrás.

$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 mejor enfoque

Considere almacenar cada entrada de nota en una tabla separada con una relación de clave externa con el "cliente potencial" principal y la marca de tiempo de creación. De esa manera, simplemente recupera todas las entradas de notas secundarias en orden de creación y las nuevas entradas simplemente se insertan.

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;