2016-03-09 2 views
0

Сегодня я пытался создать запрос в MySQL, который обновил бы все invoice_numbers, у которого есть идентификатор внутри строки.PHP/MYSQL UPDATE с предложением IN()

UPDATE userhour SET invoice_number='{$invoice_number}' 
WHERE id IN (" . $userhoursString . ")"; 

Все поля существуют и запрос работает, но я получаю эту ошибку, которую я не могу избавиться от:

Database Query не удалось: У вас ошибка в вашем SQL синтаксиса; проверить руководство, которое соответствует Вашей версии сервера MariaDB для правого синтаксиса использовать вблизи «1» в строке 1 содержание

Последний запрос: 1

эхо в моем браузере дает мне: UPDATE userhour SET invoice_number = '2016030953500' WHERE id IN (24)

Это отлично работает в phpmyadmin, поэтому я полностью потерял это.

///// ///// EDIT

 
Field    Type Null Key Default Extra 
id     int(11) NO  PRI NULL  Auto_increment 
project_id   int(11) NO  NULL 
payment_id   int(11) NO  NULL 
userhour_category_id int(11) NO  NULL 
minutes_spend  int(11) NO  NULL 
description   text NO  NULL 
active    int(11) NO  NULL 
invoice_number  varchar NO  0 
date_created   datetimeNO  NULL 
date_modified  datetimeNO  NULL 
<?php 
require_once("Classes/ini_classes.php"); 
$_SESSION["errors"] = ""; 

if (!isset($_SESSION['username'])) { 
    redirect_to('login.php'); 
} else { 
    require("Classes/phpMailer/PHPMailerAutoload.php"); 
    error_reporting(0); 
    define('EURO',chr(128)); 

    $customer_id = $Database->escape_value($_GET['customer']); 
    $project_id  = $Database->escape_value($_GET['project']); 
    $vat_id   = $_POST['vat']; 

    // retrieve all necessary database information. 
    $customer_result_set   =  $Database->fetchSingleArray($Database->customQuery("SELECT * FROM customer WHERE id='{$customer_id}'")); 
    $project_result_set    =  $Database->fetchSingleArray($Database->customQuery("SELECT * FROM project WHERE id='{$project_id}'")); 
    $vat_result_set     =  $Database->fetchSingleArray($Database->customQuery("SELECT * FROM vat WHERE id='{$vat_id}'")); 

    // get all customer info in variables 
    $insert_customer_name   =  $customer_result_set['customer_name']; 
    $insert_customer_streetname  =  $customer_result_set['streetname']; 
    $insert_customer_city   =  $customer_result_set['city']; 
    $insert_customer_zip_code  =  $customer_result_set['zip_code']; 
    $insert_customer_province  =  $customer_result_set['province']; 

    // get all necessary project info 
    $insert_project_name   =  $project_result_set['project_name']; 

    // calculate the price variables 
    $total_time      = $_POST['time_so_far']; 
    $price_per_hour     = $_POST['price_per_hour']; 
    $vat       = $vat_result_set['percentage']; 
    $subTotal      = ($price_per_hour/60) * $total_time; 
    $grandTotal      = (($subTotal * $vat)/100) + $subTotal; 
    $grandTotalDisplay    = number_format((float)$grandTotal, 2, '.', ''); 


    $date_today    = strtotime(date('Y-m-d')); 
    $deadline_date   = strtotime('+30 day', $date_today); 
    $deadline_formatted  = gmdate("m-d-Y", $deadline_date); 

    // rwewrite the array to a string and then get all userhours associated. 
    $userhoursToBill  = $_POST['billed']; 
    $userhoursString  = implode(', ', $userhoursToBill); 
    $userhour_result_set = $Database->fetchAllArray($Database->customQuery("SELECT * FROM userhour WHERE id IN ($userhoursString) AND invoice_number='0'")); 

    $invoice_number   = date('Ymd') . $customer_id . $project_id . date('s'); 


    // email to send to 
    $email_to_send_to  = $Database->escape_value($_POST['email']); 
} 

// create the PDF 
    class PDF_receipt extends FPDF 
    { 
     function ___construct($orientation = 'P', $unit = 'pt', $format = 'A4', $margin = 40) 
     { 
      $this->FPDF($orientation, $unit, $format); 
      $this->SetTopMargin($margin); 
      $this->SetRightMargin($margin); 
      $this->SetLeftMargin($margin); 

      $this->SetAutoPageBreak(true, $margin); 
     } 

     function Header() 
     { 
      $this->SetFont('Arial', 'B', 20); 
      $this->SetFillColor(36, 96, 84); 
      $this->SetTextColor(225); 
      $image = "images/logo-for-invoice.jpg"; 
      $this->Image($image); 

     } 

     function Footer() 
     { 
      $this->SetFont('Arial', '', 12); 
      $this->SetTextColor(0); 
      $this->Cell(0, 20, "Thank you for purchasing with us.", 'T', 0, 'C'); 
     } 
    } 


    $pdf = new PDF_receipt(); 
    $pdf->AddPage(); 
    $pdf->SetFont('Arial', '', 12); 

    $pdf->Ln(); 
    $pdf->SetY(30); 
    $pdf->SetFillColor(14); 
    $pdf->SetTextColor(225); 

    $pdf->SetFillColor(255); 
    $pdf->SetTextColor(0); 
    $pdf->SetY(45); 

    $pdf->SetFont('Arial', 'B', 12); 
    $pdf->Cell(190, 7, "Invoice for: " , 0, 1, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(135, 7, $insert_customer_name, 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7, 'Reniax communication solutions', 0, 1, 'L', true); 

    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(135, 7, $insert_customer_streetname, 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7, 'Richterslaan 177', 0, 1, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 

    $pdf->Cell(135, 7, $insert_customer_zip_code. ', ' . $insert_customer_city, 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7, '3431 AJ, Nieuwgein', 0, 1, 'L', true); 

    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(135, 7, $insert_customer_province, 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7, 'Tel: 030-6300415', 0, 1, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Ln(); 

    $pdf->SetFont('Arial', '', 18); 
    $pdf->SetTextColor('19', '141', '223'); 
    $pdf->Cell(0,15, 'INVOICE', 0, 1, 'L'); 
    $pdf->SetFont('Arial', '', 12); 
    $pdf->Cell(0, 1,'', 'B', 1, 'L', true); 
    $pdf->SetTextColor(0); 
    $pdf->SetFont('Arial', '', 12); 
    $pdf->Ln(); 

    // border fix 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(0, 3,'', 0, 1, 'L', true); 

    $pdf->SetFont('Arial', 'B', 10); 
    $pdf->Cell(40, 7,'Invoice number: ', 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7, $invoice_number, 0, 0, 'L', true); 

    $pdf->SetFont('Arial', 'B', 10); 
    $pdf->Cell(40, 7,'Payment terms:', 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7,'Payment within 30 days.', 0, 1, 'L', true); 

    $pdf->SetFont('Arial', 'B', 10); 
    $pdf->Cell(40, 7, 'Date: ' . date('M-d-Y'), 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7, date('M-d-Y'), 0, 0, 'L', true); 

    $pdf->SetFont('Arial', 'B', 10); 
    $pdf->Cell(40, 7,'Bank account name: ' , 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7,'Rodney Wormsbecher', 0, 1, 'L', true); 

    $pdf->SetFont('Arial', 'B', 10); 
    $pdf->Cell(40, 7,'Payment due: ', 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(55, 7, $deadline_formatted, 0, 0, 'L', true); 

    $pdf->SetFont('Arial', 'B', 10); 
    $pdf->Cell(40, 7,'IBAN: ', 0, 0, 'L', true); 
    $pdf->SetFont('Arial', '', 10); 
    $pdf->Cell(45, 7,'RABO NL00 1234 1234', 0, 1, 'L', true); 
    // border fix 
    $pdf->Cell(0, 3,'', 'B', 1, 'L', true); 
    $pdf->Ln(); 


    $pdf->SetFont('Arial', 'B', 12); 
    $pdf->Ln(10); 

    $pdf->SetTextColor('19', '141', '223'); 
    $pdf->Cell(110, 10, "Description", 1, 0, 'C', true); 
    $pdf->Cell(30, 10, "Date", 1, 0, 'C', true); 
    $pdf->Cell(25, 10, "Time", 1, 0, 'C', true); 
    $pdf->Cell(25, 10, "Price", 1, 1, 'C', true); 
    $pdf->SetTextColor(0); 
    $pdf->SetFillColor(243); 
    $pdf->Cell(110, 1, "", 'LRT', 0, 'C', true); 
    $pdf->Cell(30, 1, "", 'LRT', 0, 'C', true); 
    $pdf->Cell(25, 1, "", 'LRT', 0, 'C', true); 
    $pdf->Cell(25, 1, "", 'LRT', 1, 'C', true); 
    $pdf->SetFillColor(255); 




    // total width: 190 
    $pdf->SetFont('Arial', '', 10); 
    $counter = 0; 
    foreach ($userhour_result_set as $userhour) { 
     if (($counter % 2) == 0) { 
      $pdf->SetFillColor(243); 
     } else { 
      $pdf->SetFillColor(255); 
     } 
     $pdf->Cell(110, 8, ' ' . substr($userhour['description'], 0, 63), "LR", 0, 'L', true); 
     $pdf->Cell(30, 8, substr($userhour['date_created'], 0, 10), "LR", 0, 'C', true); 
     $pdf->Cell(25, 8, ' ' . calculateMinTohours($userhour['minutes_spend']), "LR", 0, 'L', true); 
     $pdf->Cell(25, 8, ' ' . EURO . number_format((float)($price_per_hour/60), 2, '.', '') * $userhour['minutes_spend'], "LR", 1, 'L', true); 

     $counter++; 
    } 

    $pdf->Cell(140, 8, '', 'T', 0, 'R', true); 
    $pdf->Cell(25, 8, ' ' . calculateMinTohours($total_time), 1, 0, 'L', true); 
    $pdf->Cell(25, 8, ' ' . EURO . number_format((float)$subTotal, 2, '.', ''), 1, 1, 'L', true); 

    $pdf->Cell(140, 8, '', 0, 0, 'R', true); 
    $pdf->Cell(25, 8, 'VAT: ', 'T', 0, 'R', true); 
    $pdf->Cell(25, 8, ' ' . $vat . "%", 1, 1, 'L', true); 

    $pdf->Cell(140, 8, '', 0, 0, 'R', true); 
    $pdf->Cell(25, 8, 'Total: ', 0, 0, 'R', true); 
    $pdf->Cell(25, 8, ' ' . EURO . number_format((float)$grandTotalDisplay, 2, '.', ''), 1, 1, 'L', true); 


    $pdf->Ln(10); 
    $pdf->Output('invoices/' . $invoice_number . '.pdf', 'F'); 


    // send the PDF through mail. 
    $mail = new PHPMailer(); 
    $mail->IsSMTP(); 
    $mail->Mailer = "SMTP"; 
    $mail->Host = "smtp-mail.outlook.com"; 
    $mail->Port = "587"; // 8025, 587 and 25 can also be used. Use Port 465 for SSL. 
    $mail->SMTPAuth = true; 
    $mail->SMTPSecure = 'TLS'; 
    $mail->Username = "[email protected]"; 
    $mail->Password = "rodney2802"; 

    $mail->From  = "[email protected]"; 
    $mail->FromName = "Rodney Wormsbecher"; 
    $mail->AddAddress($email_to_send_to); 
    $mail->AddReplyTo("[email protected]", "Rodney Wormsbecher"); 

    $mail->Subject = "Invoice #" . $invoice_number . " - customer: " . $insert_customer_name . " project: " . $insert_project_name; 
    $mail->Body  = "The invoice for " . $insert_customer_name . " project: " . $insert_project_name; 
    $mail->AddAttachment('invoices/' . $invoice_number . '.pdf', 'invoice for: ' . $invoice_number); 
    $mail->WordWrap = 50; 

    if(!$mail->Send()) { 
     $_SESSION['flash_message']  = 'Mailer error: ' . $mail->ErrorInfo; 
     exit; 
    } 


    // get all userhours and update their invoice numbers 

    $sql = "UPDATE userhour SET invoice_number='{$invoice_number}' WHERE id IN (" . $userhoursString . ")"; 
    echo $sql; 
    $update = $Database->customQuery($Database->customQuery($sql)); 


    // when finished redirect. 
    $log_message  = "[" . date("Y-m-d H:i:s") . "] [ INVOICE CREATE ] " . $invoice_number . " has been created. by " . ucfirst($_SESSION['username']); 
    WriteToLog($log_message, 0); 

    $_SESSION['flash_message']  = $invoice_number . " has been created."; 
    // redirect_to("customer_view.php?project=$project_id&customer=$customer_id"); 
?> 

Кто-нибудь есть какие-либо идеи, что я делаю не так? любая помощь очень ценится

+0

Вы используете MySQL или MariaDB? Насколько я знаю, MariaDB - это база данных NoSQL. – AndreFeijo

+1

Можете ли вы «эхо» выполнить ваш запрос и поделиться им? – Mureinik

+0

^. Кроме того, что находится в '$ userhoursString'? Кроме того, остерегайтесь [Bobby Tables] (http://bobby-tables.com). – Amadan

ответ

0

Ошибка в этой строке:

$update = $Database->customQuery($Database->customQuery($sql)); 

Вы можете определить сами сейчас, не так ли?

Существует два вызова $Database->customQuery(). Внутренний вызов выполняет запрос и, вероятно, возвращает 1 (или TRUE). Внешний вызов пытается запустить строку '1' в качестве SQL-запроса, поэтому сообщение об ошибке.

Изменить это:

$update = $Database->customQuery($sql); 
+0

Спасибо большое! –

Смежные вопросы