Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android PHP PDO MySQL更新语法错误_Php_Mysql - Fatal编程技术网

Android PHP PDO MySQL更新语法错误

Android PHP PDO MySQL更新语法错误,php,mysql,Php,Mysql,我是约翰尼。 我是日本人。 PHP-PDO很难 地址14:24 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near的正确语法名前(カナ), 生年月日, 郵便番号, 都道府県コード, 住所1,'在第1行 enter code here function InsertUpdate($pdo, $tbname, $stmt) { if (isset($_POST['callName'])) {

我是约翰尼。 我是日本人。 PHP-PDO很难

地址14:24 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near的正确语法名前(カナ), 生年月日, 郵便番号, 都道府県コード, 住所1,'在第1行

enter code here

function InsertUpdate($pdo, $tbname, $stmt) {

    if (isset($_POST['callName'])) {
        if ($callName = $_POST['callName']) {
            if ($callName === 'callPer') $tbname = 'Customer';
            if ($callName === 'callCar') $tbname = 'CarInfo2';
        }
    } else {
        echo "Confirmationからの送信";
    }

    $stmt = $pdo->query('DESCRIBE '.$tbname);

    $tabCount = (is_numeric($_POST['車両判別区分']) ? (int)$_POST['車両判別区分'] : 0);

    while ($row = $stmt->fetch()) {

        $key = $row['Field'];

        if ($row['Extra'] === 'auto_increment') {

            $idcol = $key;

            if ($id = (is_numeric($_POST[$key]) ? (int)$_POST[$key]: 55)) {
                //$id = (int)$_POST[$key];
                echo "成功?";
                echo "id = $id"."\r\n";
            }

            $cols = array();
            $data = array();

        } else {

            if (!isset($_POST[$key])) continue;

            $cols[] = $key;
            $upds[] = $key;
            $data[] = $_POST[$key];
        } 

    } // while終了


/////////////////////////////////////////////////////////
/////////////THIS IS ERROR !!! HELP StackOverFlow!!!!!///
/////////////////////////////////////////////////////////
    if (isset($id)) {

        $stmt = $pdo->prepare('SELECT * FROM '.$tbname.' WHERE '.$idcol.' = ?');
        $stmt->execute(array($id));

        $stmt = $pdo->prepare('UPDATE ' . $tbname . ' SET ' . implode(', ', $upds) . ' WHERE ' . $idcol . ' = ?');
        array_push($data, $id);
        $stmt->execute($data);

    } else {

        $stmt = $pdo->prepare('INSERT INTO '.$tbname.'('.$idcol.','.implode(',', $cols).') VALUES ('.implode(',', array_fill(0, count($cols)+1, ' ? ')).')');

        array_unshift($data, $id);
        $stmt->execute($data);
    }

    if ($stmt->rowCount() != 1) echo 'error';


    if (isset($_POST['regId'])) {
        $regid = $data[10];
        $apikey = "APIKEY";

        $rq = new HTTP_Request("https://android.googleapis.com/gcm/send");
        $rq -> setMethod(HTTP_REQUEST_METHOD_POST);
        $rq -> addHeader("Authorization", "key=".$apikey);
        $rq -> addPostData("registration_id", $regid);
        $rq -> addPostData("collapse_key", "1");
        $rq -> addPostData("data.message", $_POST['regId']);

        if (!PEAR::isError($rq -> sendRequest()))
            $rq -> getResponseBody();
        else
            print "\nError has occurred";

    } else {
        echo "こちらはPdoTest.phpです。GCM接続できません";
    }

    for ($i = 0; $i < count($colname); $i++) 
        echo "\r\ncolname = {$colname[$i]}\r\n";

    echo "\r\n\r\nPHP送信が完了しました\r\n";
}
更新SQL错误为

SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第1行附近要使用的正确语法

enter code here

function InsertUpdate($pdo, $tbname, $stmt) {

    if (isset($_POST['callName'])) {
        if ($callName = $_POST['callName']) {
            if ($callName === 'callPer') $tbname = 'Customer';
            if ($callName === 'callCar') $tbname = 'CarInfo2';
        }
    } else {
        echo "Confirmationからの送信";
    }

    $stmt = $pdo->query('DESCRIBE '.$tbname);

    $tabCount = (is_numeric($_POST['車両判別区分']) ? (int)$_POST['車両判別区分'] : 0);

    while ($row = $stmt->fetch()) {

        $key = $row['Field'];

        if ($row['Extra'] === 'auto_increment') {

            $idcol = $key;

            if ($id = (is_numeric($_POST[$key]) ? (int)$_POST[$key]: 55)) {
                //$id = (int)$_POST[$key];
                echo "成功?";
                echo "id = $id"."\r\n";
            }

            $cols = array();
            $data = array();

        } else {

            if (!isset($_POST[$key])) continue;

            $cols[] = $key;
            $upds[] = $key;
            $data[] = $_POST[$key];
        } 

    } // while終了


/////////////////////////////////////////////////////////
/////////////THIS IS ERROR !!! HELP StackOverFlow!!!!!///
/////////////////////////////////////////////////////////
    if (isset($id)) {

        $stmt = $pdo->prepare('SELECT * FROM '.$tbname.' WHERE '.$idcol.' = ?');
        $stmt->execute(array($id));

        $stmt = $pdo->prepare('UPDATE ' . $tbname . ' SET ' . implode(', ', $upds) . ' WHERE ' . $idcol . ' = ?');
        array_push($data, $id);
        $stmt->execute($data);

    } else {

        $stmt = $pdo->prepare('INSERT INTO '.$tbname.'('.$idcol.','.implode(',', $cols).') VALUES ('.implode(',', array_fill(0, count($cols)+1, ' ? ')).')');

        array_unshift($data, $id);
        $stmt->execute($data);
    }

    if ($stmt->rowCount() != 1) echo 'error';


    if (isset($_POST['regId'])) {
        $regid = $data[10];
        $apikey = "APIKEY";

        $rq = new HTTP_Request("https://android.googleapis.com/gcm/send");
        $rq -> setMethod(HTTP_REQUEST_METHOD_POST);
        $rq -> addHeader("Authorization", "key=".$apikey);
        $rq -> addPostData("registration_id", $regid);
        $rq -> addPostData("collapse_key", "1");
        $rq -> addPostData("data.message", $_POST['regId']);

        if (!PEAR::isError($rq -> sendRequest()))
            $rq -> getResponseBody();
        else
            print "\nError has occurred";

    } else {
        echo "こちらはPdoTest.phpです。GCM接続できません";
    }

    for ($i = 0; $i < count($colname); $i++) 
        echo "\r\ncolname = {$colname[$i]}\r\n";

    echo "\r\n\r\nPHP送信が完了しました\r\n";
}

实际上,您的问题不在于PDO,而在于基本的字符串操作。您编写了一个程序来动态创建SQL查询,但它失败了。不是PDO失败了,而是您的程序。要修复它,您必须检查结果。结果不是PDO语句,而只是一个字符串。一个SQL字符串。您必须检查这个结果才能看到并最终修复代码


因此,与其直接在prepare中编写程序,不如将结果存储在一个变量中,并在出现错误时回显此变量。

尝试使用双引号而不是单引号进行查询。您可能需要对其中已有的内容进行某些修改。如果可能,请始终尝试使用双引号来包装查询例如:更新$tbname集“.inpode”、“,$upds.”WHERE“$idcol.”=?您确定需要这样一个复杂的自动查询生成器吗?感谢fred和YourCommon的评论。但是更新$tbname集“.inpode”、“,$upds.”WHERE“$idcol.”是错误;D