簡體   English   中英

非法的變量名稱/編號

[英]Illegal Variable Name/Number

我在以下代碼中有一個名為database_work_location的字段:

$database_work_location =& new Select_Database_Work_Location();
$database_work_location->setSelected($in['database_work_location']);
$form->addElement('database_work_location', $database_work_location );

然后使用以下代碼將其顯示在表單上:

<p>
Database Location:<br />
<?= $form->render('database_work_location'); ?>
</p>

到目前為止,一切正常,我可以選擇一個完全沒有問題的位置。

最后,我使用以下代碼將其發送到數據庫:

case 'DATABASE':

$args[] = array('database_work_location', $in['database_work_location']);

$DB->query("
    INSERT INTO request_database
    (
        database_work_location
    )
    VALUES (
        :database_work_location
    )
    "
    ,$args
    );

    break;

但是,嘗試提交表單時出現以下錯誤,我不知道為什么。

SQL Error: 1036 - ORA-01036: illegal variable name/number
[query]

INSERT INTO request_database
(
database_work_location
)
VALUES (
:database_work_location
)

[binds] request_cn => [9867520000] length=[] created_by => [someone] length=[] database_work_location => [theplace] length=[] 

因此,如果綁定正確通過(它會識別所選位置),為什么它告訴我這是一個非法變量?

在數據庫表中,列database_work_location是大小為100的varchar2,老實說我看不到問題。

嘗試像這樣使用PDOStatement:

case 'DATABASE':

$stm = $DB->prepare('INSERT INTO request_database(database_work_location)
VALUES (:database_work_location)');

$stm->bindParam(':database_work_location', $in['database_work_location']);

$stm->execute();

break;

我已經實現了您的代碼,現在可能效果很好

case 'DATABASE':

$args[] = array('database_work_location', $in['database_work_location']);

$DB->query("
    INSERT INTO request_database
    (
        database_work_location
    )
    VALUES (
        database_work_location
    )
    "
    ,$args
    );

    break;

嘗試這個 :

case 'DATABASE':

$args = array('database_work_location', $in['database_work_location']);

$DB->query("
    INSERT INTO request_database
    (
        database_work_location
    )
    VALUES (
        database_work_location
    )
    "
    ,$args
    );

    break;

祝好運。

如果您不想使用Rida建議的解決方案(這是更好的方法),我認為您的錯誤是使用了錯誤的名稱,驅動程序無法將列名與數據區分開。

嘗試這個:

$args[] = array('database_work_location_data', $in['database_work_location']);

$DB->query("
    INSERT INTO request_database
    (
        database_work_location
    )
    VALUES (
        :database_work_location_data
    )
    "
    ,$args
    );

    break;

如果我不清楚,問我。

為什么不呢?

case 'DATABASE':

    $query = 'INSERT INTO request_database(database_work_location)
    VALUES ('. $in['database_work_location'] .')';

    $stm = $DB->prepare($query);

    $stm->execute();

    break;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM