Android PHP PDO MySQL更新语法错误
我是约翰尼。 我是日本人。 PHP-PDO很难 地址14:24 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near的正确语法名前(カナ), 生年月日, 郵便番号, 都道府県コード, 住所1,'在第1行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'])) {
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