ich ein verwirrendes Problem, dass ich nicht zu begreifen scheinen ... Ich bin der Hoffnung, jemand hier vielleicht in der Lage sein, mich in die richtige Richtung weisen ...Escaping Apostroph in PHP beim Einfügen in MySQL
Ich habe zwei SQL-Anweisungen: - der erste gibt Informationen aus einem Formular in die Datenbank ein. - die Sekunde nimmt Daten von der Datenbank, die oben eingegeben wird, schickt eine E-mail und notiert dann die Details der Verhandlung
Das Problem ist, dass es scheint, dass ein einzelner Anführungsstrich einen MySQL Fehler nur auf dem zweiten Eintrag löst !! ! Die erste Instanz funktioniert ohne Problem, aber die zweite Instanz löst die mysql_error()
aus.
Werden die Daten aus einem Formular anders gehandhabt als die in einem Formular erfassten Daten?
Abfrage # 1 - Das funktioniert ohne Problem (und ohne das Apostroph entweichende)
$result = mysql_query("INSERT INTO job_log
(order_id, supplier_id, category_id, service_id, qty_ordered, customer_id, user_id, salesperson_ref, booking_ref, booking_name, address, suburb, postcode, state_id, region_id, email, phone, phone2, mobile, delivery_date, stock_taken, special_instructions, cost_price, cost_price_gst, sell_price, sell_price_gst, ext_sell_price, retail_customer, created, modified, log_status_id)
VALUES
('$order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', '$booking_name', '$address', '$suburb', '$postcode', '$state_id', '$region_id', '$email', '$phone', '$phone2', '$mobile', STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', '$special_instructions', '$cost_price', '$cost_price_gst', '$sell_price', '$sell_price_gst', '$ext_sell_price', '$retail_customer', '".date('Y-m-d H:i:s', time())."', '".date('Y-m-d H:i:s', time())."', '1')");
Abfrage # 2 - Dies schlägt fehl, wenn Sie einen Namen mit einem Apostroph eingeben (zB O'Brien)
$query = mysql_query("INSERT INTO message_log
(order_id, timestamp, message_type, email_from, supplier_id, primary_contact, secondary_contact, subject, message_content, status)
VALUES
('$order_id', '".date('Y-m-d H:i:s', time())."', '$email', '$from', '$row->supplier_id', '$row->primary_email' ,'$row->secondary_email', '$subject', '$message_content', '1')");
Ja ok, danke für die Lektion jedoch in der richtigen Codierung, dies nicht die Frage beantworten, warum die beiden Abfragen nicht den gleichen Fehler zu werfen ... – sjw
Ich bin nicht auf der Suche nach der Antwort, wie es zu beheben - ich weiß, wie es zu beheben. Ich suche das "Warum"! – sjw
Es geht nicht um * richtige * Codierung, es geht um eine klaffende und gefährliche Sicherheitslücke. Nachdem dies gesagt wurde, füge ich meiner ursprünglichen Antwort ein Snippet hinzu, um das zugrunde liegende Problem zu veranschaulichen. Ich würde es hier tun, aber die Formatierung wäre alles wackelig. :) – awgy