语法错误与准备好的语句mysql / php

时间:2015-02-04 15:34:13

标签: php mysql prepared-statement

自昨晚以来一直无所事事。但

createOrder($website,(int)$nVotes,(int)$timeframe,$loggedInUser->email,$server,(int)$start,$referer);

var_dumping这些变量显示(早先):

  

string(2)" web1"字符串(2)" 10"字符串(2)" 10"串(23)   " myemail@gmail.com" string(8)" myserver" int(1423063633)string(17)   " http://google.com"

和似乎有问题的功能是:

function createOrder($website,$votes,$timeframe,$user,$server,$start,$referer)
{
    global $mysqli,$db_table_prefix;
    $time = time();
    $stmt = $mysqli->prepare("INSERT INTO ".$db_table_prefix."orders (
        serverId,
        orderUser,
        targetUrl,
        nVotes,
        timeframe,
        referer,
        starting
        )
        VALUES (
        ?,
        ?,
        ?,
        ?,
        ?,
        ?,
        ?
        )");
    file_put_contents("error.log", $mysqli->errno . $mysqli->error );
    $stmt->bind_param("sssiisi", $server, $user, $website, $votes, $timeframe, $referer, $start);
    file_put_contents("error1.log", $stmt->errno . $stmt->error );
    $stmt->execute();
    file_put_contents("error1.log", $stmt->errno . $stmt->error );
    $stmt->close(); 

nginx.error.log归咎于bind_param

  

" PHP消息:PHP致命错误:调用成员函数   第1223行funcs.php中非对象的bind_param()

error.log归咎于语法错误

(check the manual) for the syntax to use near 'starting

  )
                VALUES (
                ?,
                ?,
                ?,
                ?,
                ?,
                ?,
                ?
                )' at line 8

1 个答案:

答案 0 :(得分:2)

问题是startingreserved word in MySQL,您将其用作字段名称。你应该用反引号包装它:

    serverId,
    orderUser,
    targetUrl,
    nVotes,
    timeframe,
    referer,
    `starting`