Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Realmente lutando com CONCAT_WS ... por favor ajude um novato :)


A primeira coisa que posso ver é seu sprintf() tem dois parâmetros de substituição, mas apenas um espaço reservado. Eu estou pensando que você realmente quis dizer
$updateSQL = sprintf ("UPDATE Leads SET Notes = CONCAT_WS('\n', Notes, %s) WHERE Id=%d",
    GetSQLValueString($_POST['note'], "text"),
    GetSQLValueString($_POST['Id'], "int"));

Além disso, seu GetSQLValueString() A função envolve automaticamente os parâmetros de "texto" com aspas, então você precisa remover as aspas ao redor dos espaços reservados.

Também alterei o espaço reservado de ID para %d como eu suponho que você está esperando um número.

Você pode se beneficiar ao habilitar o relatório de erros para desenvolvimento. Este erro (e possivelmente outro relacionado ao $Notes indefinido variável) teria facilitado a depuração.

Coloque isso no topo do seu script (somente para desenvolvimento)
ini_set('display_errors', 'On');
error_reporting(E_ALL);

Cruzada Pessoal


Largue a biblioteca MySQL e mova seu código para PDO, você não olhará para trá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']
));

Uma abordagem melhor


Considere armazenar cada entrada de nota em uma tabela separada com um relacionamento de chave estrangeira com o "Lead" pai e o carimbo de data/hora de criação. Dessa forma, você simplesmente recupera todas as entradas de notas filhas na ordem de criação e as novas entradas são simplesmente inseridas.
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;