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

Kæmper virkelig med CONCAT_WS ... vær venlig at hjælpe en nybegynder :)

Det første jeg kan se er din sprintf() har to substitutionsparametre, men kun én pladsholder. Jeg tror faktisk, du mente

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

Også din GetSQLValueString() funktion ombryder automatisk "tekst"-parametre med anførselstegn, så du skal fjerne anførselstegn omkring pladsholderne.

Jeg ændrede også ID-pladsholderen til %d da jeg går ud fra, at du forventer et nummer.

Du kan drage fordel af at aktivere fejlrapportering til udvikling. Denne fejl (og potentielt en anden vedrørende den udefinerede $Notes variabel) ville have gjort fejlfinding lettere.

Placer dette øverst i dit script (kun til udvikling)

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

Personligt korstog

Slip MySQL-biblioteket og flyt din kode til PDO, du vil ikke se dig tilbage.

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

En bedre tilgang

Overvej at gemme hver noteindgang i en separat tabel med en fremmednøglerelation til det overordnede "Lead" og oprettelsestidsstemplet. På den måde henter du blot alle underordnede noteposter i oprettelsesrækkefølge, og nye poster indsættes simpelthen.

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. MySQLi Query returnerer værdi i tilfælde af Select uden matchende rækker

  2. Hvorfor returnerer denne SQL INSERT-sætning en syntaksfejl?

  3. crawle en html-side ved hjælp af php?

  4. Gendan mysql-databasen fra .frm-filer