sql >> Databáze >  >> RDS >> Mysql

Opravdu bojuji s CONCAT_WS ... prosím pomozte nováčkovi :)

První věc, kterou vidím, je vaše sprintf() má dva substituční parametry, ale pouze jeden zástupný symbol. Myslím, že jsi to vlastně myslel

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

Také vaše GetSQLValueString() funkce automaticky zalamuje "textové" parametry do uvozovek, takže musíte uvozovky kolem zástupných symbolů odstranit.

Také jsem změnil zástupný symbol ID na %d protože předpokládám, že očekáváte číslo.

Můžete mít prospěch z povolení hlášení chyb pro vývoj. Tato chyba (a potenciálně další ohledně nedefinovaného $Notes proměnná) by ladění usnadnilo.

Umístěte jej na začátek skriptu (pouze pro vývoj)

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

Osobní křížová výprava

Zahoďte knihovnu MySQL a přesuňte svůj kód do PDO, už se nebudete ohlížet.

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

Lepší přístup

Zvažte uložení každé položky poznámky do samostatné tabulky se vztahem cizího klíče k nadřazenému „Lead“ a časovému razítku vytvoření. Tímto způsobem jednoduše načtete všechny položky podřízených poznámek v pořadí vytvoření a nové položky se jednoduše vloží.

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. Poddotaz MySQL - Najděte pouze první záznam v LEFT JOIN

  2. Rozdíl v měsících mezi daty v MySQL

  3. připojte se k databázi mysql pomocí knihovny phpseclib

  4. Mysql:provedení příkazu odepřeno uživateli ''@'localhost' pro rutinní chybu