繁体   English   中英

PHP,PDO(可能不是MySQL)SQLSTATE [42000](1064)

[英]Something mysterious with PHP, PDO (probably not MySQL) SQLSTATE[42000](1064)

以下查询确实发生了一些奇怪的事情,当我在PhpMyAdmin上尝试它时,它可以正常工作,但是当我从PHP运行它时,出现以下错误。

我正在使用PDO ...

也许我是盲人,或者也许是因为我已经工作了很多小时,但事实是我没有发现任何错误。

错误信息

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第2行的'INSERT INTO downsync(id,signature)VALUES('1','b01c0d494aca29162d815346d0de5f'附近使用


查询... 突出显示的版本(http://pastebin.com/dkYRJCS1)

 CREATE TEMPORARY TABLE IF NOT EXISTS downsync (`id` int(11) NOT NULL, `signature` VARCHAR(250) NOT NULL); INSERT INTO downsync (id, signature) VALUES ('1','b01c0d494aca29162d815346d0de5fd3'), ('2','bc3d25e2a527a20779914f5c7dc181e5'), ('3','89bc5c4e013aea0b28e61561ada05770'), ('4','8ce1daecd2a20c23b1c3344dac07880a'), ('6','0a679dc54c3654933329fc7bbf01c401'), ('7','40e6af407141ab652a4cad01f2f30a05'), ('9','331e12d5136a24483a12a0610f0ecd80'), ('10','570e68fd6cccd91aaf1173845739d9ab'), ('11','603e6a77d56a21597563119b319aaf67'), ('12','7649d3e71223cf543994189fe4053670'), ('14','825d0a186fd938eb0417a1bf3e30d9c3'), ('15','4a66d12f56b9ff93332b7c841c986751'), ('16','7de9d51199cdd316d869510fe97f584c'), ('17','7ef58d702ea43e02398f3f983c8292f3'), ('18','430c864532d3352691c76a9517f54498'), ('19','11a0e5cd2497166b0f85f3e318e6ff2f'), ('20','9771222ec70e55722e2582f3238f4e44'), ('21','bffd7ce7a4b59bb439a98ae898e3a703'), ('22','daf986c8682f856b1828cd4b1c8888b7'), ('23','3fecc9e7e6291b0ea12bbe60c46d361b'), ('24','41e49696971f00648f3a3e5971ea765d'), ('25','0f58aa0ffa8fd6efeb3bb4ccee590d44'); SELECT `downsync.id`, IF(MD5(CONCAT( customers.id, IFNULL(customers.full_name,0), IFNULL(customers.phone,0), IFNULL(customers.mobile,0), IFNULL(customers.email,0), IFNULL(customers.address,0), IFNULL(customers.zipcode,0), IFNULL(customers.city,0), IFNULL(customers.state,0), IFNULL(customers.country,0), IFNULL(customers.gmaps_addrs,0) )) = signature,1,0) as unchanged FROM downsync INNER JOIN customers ON downsync.id = customers.id; 

编码...

“这是PHP来源,我现在有点慢,很抱歉忘记了...;)”

 $query = " CREATE TEMPORARY TABLE IF NOT EXISTS downsync (`id` int(11) NOT NULL, `signature` VARCHAR(250) NOT NULL); INSERT INTO downsync (id, signature) VALUES ('1','b01c0d494aca29162d815346d0de5fd3'), ('2','bc3d25e2a527a20779914f5c7dc181e5'), ('3','89bc5c4e013aea0b28e61561ada05770'), ('4','8ce1daecd2a20c23b1c3344dac07880a'), ('6','0a679dc54c3654933329fc7bbf01c401'), ('7','40e6af407141ab652a4cad01f2f30a05'), ('9','331e12d5136a24483a12a0610f0ecd80'), ('10','570e68fd6cccd91aaf1173845739d9ab'), ('11','603e6a77d56a21597563119b319aaf67'), ('12','7649d3e71223cf543994189fe4053670'), ('14','825d0a186fd938eb0417a1bf3e30d9c3'), ('15','4a66d12f56b9ff93332b7c841c986751'), ('16','7de9d51199cdd316d869510fe97f584c'), ('17','7ef58d702ea43e02398f3f983c8292f3'), ('18','430c864532d3352691c76a9517f54498'), ('19','11a0e5cd2497166b0f85f3e318e6ff2f'), ('20','9771222ec70e55722e2582f3238f4e44'), ('21','bffd7ce7a4b59bb439a98ae898e3a703'), ('22','daf986c8682f856b1828cd4b1c8888b7'), ('23','3fecc9e7e6291b0ea12bbe60c46d361b'), ('24','41e49696971f00648f3a3e5971ea765d'), ('25','0f58aa0ffa8fd6efeb3bb4ccee590d44'); SELECT `downsync.id`, IF(MD5(CONCAT( customer.id, IFNULL(customer.name,0), IFNULL(customer.email,0), IFNULL(customer.gmaps_addrs,0) )) = signature,1,0) as unchanged FROM downsync INNER JOIN commerces ON downsync.id = commerces.id; "; 
echo '<pre>';var_dump($query);echo '</pre>';

try {
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);



$stmt = $pdo->query($query);

//> I tried to commet this  and use the query method but it didn't work
//$stmt->setFetchMode(PDO::FETCH_ASSOC);    
//$stmt->execute($params);

    $results = $stmt->fetchAll();
}
catch(Exception $e) {

    echo 'Exeption:<pre>';var_dump($e->getMessage());echo '</pre><hr>';
    echo 'Error Obj.: <pre>';var_dump($e);echo '</pre>';
}

解:

分离3个查询就可以了

$query1 = 'CREATE TEMPORARY TABLE IF NOT EXISTS....';
$query2 = 'INSERT INTO downsync...';
$query3 = 'SELECT downsync.id...';

...

$stmt = $pdo->query($query);
$stmt = $pdo->query($query2);
$stmt = $pdo->query($query3);

感谢@ lafor,@ Prava-Mindfire解决方案,@ Ravinder

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM