Ho cercato di creare uno script PHP che sposta periodicamente le righe "completate" da una tabella sul mio sito Joomla su una tabella diversa. La query ho scritto funziona bene in phpMyAdmin:Spostamento di righe tra tabelle in Joomla
INSERT INTO my_calsgovdocs.sent_copy
SELECT * FROM my_calsgovdocs.entered_copy
WHERE `Status` LIKE '%Sent%';
DELETE FROM my_calsgovdocs.entered_copy
WHERE `Status` LIKE '%Sent%';
ho cercato di tradurlo in un po 'di codice PHP che potrebbe funzionare all'interno di Joomla, e ho incollato quel codice qui sotto. Viene restituito un errore "T_STRING inatteso" che punta alla riga sottostante che inizia ->insert into
e ora mi è venuto in mente che lo script non avrebbe funzionato perché "insert into" non è un nome di metodo valido! Finora non riesco a trovare un metodo equivalente da utilizzare all'interno di Joomla. Questo è stato il mio tentativo al codice:
try
{
$db->transactionStart();
$query = $db->getQuery(true);
$query
->insert into($db->quoteName('sent_copy'))
->select('*')
->from($db->quoteName('entered_copy'))
->where($db->quoteName('Status') . ' LIKE ' . $db->quote('%Sent%') . ';')
->delete from($db->quoteName('entered_copy'))
->where($db->quoteName('Status') . ' LIKE ' . $db->quote('%Sent%'));
$db->setQuery($query);
$result = $db->execute();
$db->transactionCommit();
}
catch (Exception $e)
{
$db->transactionRollback();
JErrorPage::render($e);
}
Qualcuno ha un'idea di come posso realizzare questo all'interno di Joomla? Preferirei (come avrai notato sopra) farlo in una transazione in modo che, se c'è un errore, non avrò un disastro nelle mie mani.
Non si può avere uno spazio lì dentro. Non sono sicuro del motivo per cui non stai usando solo "insert". Tuttavia, se lo desideri, puoi semplicemente inserire 'insert into' come parte di una stringa di query piuttosto che utilizzare il costruttore di query. Il tutto non funzionerà comunque perché non è possibile mescolare 'insert' e' delete' in questo modo. – Elin
C'è qualche ragione per cui non è possibile utilizzare un qualche tipo di stato/campo dello stato del flusso di lavoro all'interno della tabella per indicare lo stato 'completato'? Le query/viste successive possono quindi filtrare in base a questo anziché richiedere più tabelle. – developerjack
@Elin Sì; Sono assolutamente consapevole che non posso usare uno spazio lì; questo è ciò che intendevo con "'insert into' non è un nome di metodo valido!" La stringa di query potrebbe essere la strada da percorrere, però; grazie per il suggerimento Non sono sicuro di capire cosa intendi per non mischiare 'insert' e' delete', però; la query SQL che ho incollato sopra ha funzionato adeguatamente, ho solo dovuto essere in grado di attivarlo da PHP/Joomla. Potresti approfondire? – ruinlach