sql >> Databasteknik >  >> RDS >> Mysql

Kämpar verkligen med CONCAT_WS ... snälla hjälp en nybörjare :)

Det första jag kan se är din sprintf() har två substitutionsparametrar men bara en platshållare. Jag tror att du faktiskt menade

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

Även din GetSQLValueString() funktionen omsluter automatiskt "text"-parametrar med citattecken, så du måste ta bort citattecken runt platshållarna.

Jag ändrade också ID-platshållaren till %d eftersom jag antar att du förväntar dig ett nummer.

Du kan dra nytta av att aktivera felrapportering för utveckling. Detta fel (och eventuellt ett annat angående den odefinierade $Notes variabel) skulle ha gjort felsökning enklare.

Placera detta överst i ditt skript (endast för utveckling)

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

Personligt korståg

Släpp MySQL-biblioteket och flytta din kod till PDO, du kommer inte att se tillbaka.

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

Ett bättre tillvägagångssätt

Överväg att lagra varje anteckningspost i en separat tabell med en främmande nyckelrelation till den överordnade "Lead" och skapandets tidsstämpel. På så sätt hämtar du helt enkelt alla underordnade anteckningsposter i skapande ordning och nya poster infogas helt enkelt.

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. PHP MYSQL PDO SUMMA av kolumner

  2. Importera .frm- och .opt-filer till MySQL

  3. MySQL transaktion gåta

  4. Räknar poster som tillhör en kategori i MySQL