sql >> Database >  >> RDS >> Mysql

Echt worstelen met CONCAT_WS ... help een newbie :)

Het eerste wat ik kan zien is je sprintf() heeft twee vervangingsparameters, maar slechts één tijdelijke aanduiding. Ik denk dat je eigenlijk bedoelde

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

Ook uw GetSQLValueString() De functie plaatst automatisch "tekst"-parameters tussen aanhalingstekens, dus u moet de aanhalingstekens rond de tijdelijke aanduidingen verwijderen.

Ik heb ook de ID-placeholder gewijzigd in %d aangezien ik aanneem dat je een nummer verwacht.

U kunt profiteren van het inschakelen van foutrapportage voor ontwikkeling. Deze fout (en mogelijk een andere met betrekking tot de ongedefinieerde $Notes variabele) zou het debuggen gemakkelijker hebben gemaakt.

Plaats dit bovenaan je script (alleen voor ontwikkeling)

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

Persoonlijke kruistocht

Zet de MySQL-bibliotheek neer en verplaats je code naar PDO, je kijkt niet meer achterom.

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

Een betere aanpak

Overweeg om elke notitie op te slaan in een aparte tabel met een refererende sleutelrelatie met de bovenliggende "Lead" en aanmaaktijdstempel. Op die manier haalt u eenvoudig alle onderliggende notitie-items op in de volgorde waarin ze zijn gemaakt en nieuwe items worden eenvoudig ingevoegd.

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. DBX-fout:stuurprogramma kon niet correct worden geïnitialiseerd

  2. PostgreSQL-aanmaakfunctie

  3. Hoe de geboortedatum en leeftijd op te slaan zodat de leeftijd dagelijks kan worden bijgewerkt in PHP/MySQL?

  4. Weeknummer van een datum halen in MS SQL Server 2005?