Tach!
Ja man kann mehrere Inserts mit mysqli->multi_query($sql) machen.
Lieber nicht, wenn man schon bei Prepared Statements ist, dann besser diese (aus)nutzen als komplett auf den herkömmlichen Ansatz umzusteigen.
1.)
$ph_projektid = $p_code;
Es ist in den meisten Fällen zwar kein "Fehler" aber unsinnig, Variablen umherzukopieren. Vorliegend ist ein Zeichen dafür, dass $p_code in eine Spalte ph_projektid eingetragen werden soll.
Es ist im Falle von Prepared Statements mit der mysqli-Extension nicht verkehrt, für die Bind-Variablen lieber separate Variablen zu verwenden anstatt die eigentlichen Wertecontainer dafür zu verwenden. Diese Bindung erzeugt nämlich eine Referenz und die schleppt man dann dort rum, wo man sie gar nicht haben möchte.
Guter Rat: Verwende gleich Variablennamen, die der Spalte entsprechen. Das vermeidet logische Programmfehler, denn Du verwirrst Dich durch das "Bäumchen wechsle Dich" selbst. Nicht existierende Programmzeilen können keine Fehler enthalten.
Benennung von Dingen ist eine der großen Herausforderungen beim Programmieren, soweit stimme ich zu. Aber nicht beachtete Eigenheiten, die Auswirkungen auf andere Codeteile haben können, sind unangenehmer als Code, der Werte kopiert.
Du verwendest eine Spalte für das Datum und eine für die Uhrzeit. MySQL kann das in einer Spalte. Datentyp DATETIME oder TIMESTAMP.
Unangenehmer ist eher, dass das wohl String-Felder sind. Damit kann man nicht ohne Konvertierung mit den Datums- und Zeit-Funktionen arbeiten.
3.) Offenbar ist das eine Art logfile. Mir ist nicht ganz klar, warum Du für den Folgeeintrag, bei dem alles andere als der zu loggende Text (Benutzer, Projekt, Datum und Uhrzeit) identisch sein soll, nicht einfach beide Texte zu einem Eintrag zusammenfügst.
Kommaseparierte Einträge haben wieder andere Nachteile. Das muss man schon anhand des Anwendungsfalles bewerten, ob man nicht lieber doch Einzeleinträge haben möchte.
dedlfix.