mysql — PHP / SQL — синтаксис ошибки SQL

Когда запустить код:

 $result = select_query("tblinvoices", "", "id IN
(SELECT invoiceid FROM tblinvoiceitems
WHERE description LIKE '%Project #" . $projectid . "%'
OR " . $ticketinvoicesquery . " (type='Project'
AND relid='" . $projectid . "'))
OR id IN (" . db_build_in_array(db_escape_numarray($invoiceids)) . ")",
"id", "ASC");

Ошибка появляется в журнале:

 SQL Error: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near ') ORDER BY `id` ASC' at line 1
- Full Query: SELECT * FROM tblinvoices WHERE id IN (SELECT invoiceid
FROM tblinvoiceitems WHERE description
LIKE '%Project #4%' OR (type='Project' AND relid='4'))
OR id IN () ORDER BY `id` ASC

Как решить эту ошибку?

ОБНОВИТЬ:

Когда у меня нет счета, эта ошибка в журнале.
Когда у меня есть счет, код работает отлично.

     {include file="$template/subheader.tpl" title=$_lang.associatedinvoices}
{if $invoices}
<table class="table table-striped table-framed">
<thead>
<tr>
<th style="width:10%" class="textcenter">N°</th>
<th style="width:15%" class="textcenter">Date</th>
<th style="width:15%" class="textcenter">Due date</th>
<th style="width:20%" class="textcenter">Price</th>
<th style="width:20%" class="textcenter">Status</th>
<th style="width:20%" class="textcenter">View</th>
</tr>
</thead>

<tbody>
{foreach from=$invoices item=invoice}
<tr>
<td class="textcenter">#{$invoice.id}</td>
<td class="textcenter">{$invoice.date}</td>
<td class="textcenter">{$invoice.duedate}</td>
<td class="textcenter">{$invoice.total}</td>
<td class="textcenter"><span class="label {$invoice.rawstatus}">{$invoice.status}</span></td>
<td class="textcenter"><a href="viewinvoice.php?id={$invoice.id}"><i class="fa fa-eye icon_view" title="View"></i></a></td>
</tr>
{/foreach}
</tbody>
</table>
<br />
{else}
<p>{$_lang.none}</p>
{/if}

Спасибо!

0

Решение

Я не могу сказать наверняка относительно mysql, но в postgresql ошибка вызвана этой частью:

id IN ()

IN не работает с пустыми списками, по крайней мере, в PostgreSQL.

ERROR:  syntax error at or near ")"LINE 1: SELECT 1 from orders WHERE id IN ();
^
********** Error **********

ERROR: syntax error at or near ")"SQL state: 42601
Character: 35

Чтобы ваш код работал, вам нужно избегать вызова оператора SQL в ситуациях, когда переменная $invoiceids это пустой массив.

псевдокод:

if IsEmptyArray(invoiceids) {
result = empty_query()
} else {
result = select_query(...)
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]