0

I am getting the following error:

PHP Parse error:  parse error, unexpected '*', expecting '}' in /var/www/html/dev/562.ajax.php on line 278, referer: 562.shp.php?cut=8161

If we go to line 278 in file 562.ajax.php we see the following:

$sql = 'insert into NKW.EDI_CARTON_LI ' .
    '(EDI_SHIPMENT, EDI_CARTON, CORP_CODE, EDI_TOTALQTY, EDI_PRICE, ' .
    'EDI_AMOUNT, EDI_UNITWEIGHT, EDI_WEIGHT, PICKTKT_NO, SEQ_ORDER_NO, ' .
    'ORDER_NO, CUST_NO, RECORD_NO, STYLE, COLOR_NO, ' .
    'COLOR_ABBR, SIZE_NO, SIZE_NAME) ' .
    "values ($shipment, $carton, '$division', $quantity, '$price', " .
    "'{$quantity * $price}', '{$weight / $quantity}', '$weight', $ticket, $sequence, " .
    "'$order', '$customer', NKW.SEQ_EDI_CARTON_LI.nextval, '$style', '$color', " .
    "'$abbr', '$ratio', 'ALL')";
error_log($sql);
if (SQLExec($dbc, $sql))
    return array(1, 'System error in ' . __FILE__ . ' @ ' . __LINE__);

The code in question is (line 278): "'{$quantity * $price}',

Now he is obviously trying to generate a price total based on quantity, why doesn't PHP like this? It looks correct to me. I suspect I will have a similar error though with the division for the weight immediately after that. Is there some escape character or something I need to add here?

2
  • 3
    PHP cannot evaluate expressions inside {} in a double-quoted string. those are only for expanding variable values. Just remove the {} as well as the following pair, and MySQL will evaluate the values. Alternatively, perform the calculations first and store new variables. Commented Feb 4, 2014 at 21:09
  • for example change {$quantity * $price} to ' . ($quantity * $price) .' and all the other expressions in the query string Commented Feb 4, 2014 at 21:12

3 Answers 3

1

PHP doesn't allow variable arithmetic with a simple in-string substitution. Here is the same code without generating a syntax error:

$sql = 'insert into NKW.EDI_CARTON_LI ' .
'(EDI_SHIPMENT, EDI_CARTON, CORP_CODE, EDI_TOTALQTY, EDI_PRICE, ' .
'EDI_AMOUNT, EDI_UNITWEIGHT, EDI_WEIGHT, PICKTKT_NO, SEQ_ORDER_NO, ' .
'ORDER_NO, CUST_NO, RECORD_NO, STYLE, COLOR_NO, ' .
'COLOR_ABBR, SIZE_NO, SIZE_NAME) ' .
"values ($shipment, $carton, '$division', $quantity, '$price', " .
"'" . $quantity * $price ."', '" . $weight / $quantity . "', '$weight', $ticket, $sequence, " .
"'$order', '$customer', NKW.SEQ_EDI_CARTON_LI.nextval, '$style', '$color', " .
"'$abbr', '$ratio', 'ALL')";

Observe:

"'" . $quantity * $price ."', '" . $weight / $quantity . 

I ended the quote to have PHP directly evaluate the expression. Yes, it's messy with a big SQL query like this.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you samiam! Wow, such fast replies! This worked Thanks!
0

I tested out the code you posted and saw the same error. This should work:

$sql = 'insert into NKW.EDI_CARTON_LI ' .
'(EDI_SHIPMENT, EDI_CARTON, CORP_CODE, EDI_TOTALQTY, EDI_PRICE, ' .
'EDI_AMOUNT, EDI_UNITWEIGHT, EDI_WEIGHT, PICKTKT_NO, SEQ_ORDER_NO, ' .
'ORDER_NO, CUST_NO, RECORD_NO, STYLE, COLOR_NO, ' .
'COLOR_ABBR, SIZE_NO, SIZE_NAME) ' .
"values ($shipment, $carton, '$division', $quantity, '$price', '" .
$quantity * $price ."', '" . $weight / $quantity . "', '$weight', $ticket, $sequence, " .
"'$order', '$customer', NKW.SEQ_EDI_CARTON_LI.nextval, '$style', '$color', " .
"'$abbr', '$ratio', 'ALL')";
error_log($sql);

Comments

0

You can save the result into one 'outside of string' variable and then use dhe value of that result inside the string

$total = $quantity * $price
"{$total}...

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.