gpt4 book ai didi

php - 选择使用双引号字符串时,mysql 上出现错误 1064 <42000>

转载 作者:行者123 更新时间:2023-11-29 14:07:40 26 4
gpt4 key购买 nike

Zend Framework 2 生成的查询:

SELECT "uc".*, "c".* FROM "user_contacts" AS "uc" INNER JOIN "contacts" AS "c" ON "uc"."contact_id" = "c"."contact_id" WHERE "uc"."user_id" = '2' AND "c"."user_id" = '1';

导致此错误(在命令行上运行时):

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.*, "c".* FROM "user_contacts" AS "uc" INNER JOIN "contacts" AS "c" ON "uc"."con' at line 1

此查询(完全相同的查询减去双引号)运行良好:

SELECT uc.*, c.* FROM user_contacts AS uc INNER JOIN contacts AS c ON uc.contact_id = c.contact_id WHERE c.user_id = 2 AND uc.user_id = 1;

+---------+------------+------------+---------+
| user_id | contact_id | contact_id | user_id |
+---------+------------+------------+---------+
| 1 | 7 | 7 | 2 |
+---------+------------+------------+---------+
1 row in set (0.00 sec)

为什么会这样?我该如何解决这个问题?

在 Ubuntu 12.10 上使用 AMP 堆栈。

表格看起来像这样:

CREATE TABLE `contacts` (
`contact_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`contact_id`),
UNIQUE KEY `contact_id_UNIQUE` (`contact_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

CREATE TABLE `user_contacts` (
`user_id` int(11) NOT NULL,
`contact_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`,`contact_id`),
KEY `user_contacts_user_id_fkey_idx` (`user_id`),
KEY `user_contacts_contact_id_idx` (`contact_id`),
CONSTRAINT `user_contacts_contact_id_fkey` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`contact_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `user_contacts_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Zend 数据库适配器代码:

return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=' . $dbName . ';host=' . $host,
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter'
=> 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);

选择代码:

public function checkIfFriends($currentUserId,$requestedUserId) {
$currentUserId = (int) $currentUserId;
$requestedUserId = (int) $requestedUserId;

$sql = new Sql($this->tableGateway->getAdapter());

$select = $sql->select();
$select->from(array('uc' => $this->tableGateway->getTable()))
->join(array('c' => 'contacts'), 'uc.contact_id = c.contact_id');

$where = new Where();
$where
->equalTo('uc.user_id', $currentUserId)
->equalTo('c.user_id', $requestedUserId);
$select->where($where);


//echo $select->getSqlString();
$rowSet = $this->tableGateway->selectWith($select);
$row = $rowSet->current();
return ($row) ? true: false;
}

为什么它被关闭为完全相同的副本?事实并非如此。我知道问题可能是相同的,但 ZF2 正在生成一个由于引用而无法运行的查询。

最佳答案

找到的解决方案in this Zend Framework forum post :

有效,但并不是真正可以接受的解决方案,更好的解决方案将不胜感激。

public function checkIfFriends($currentUserId,$requestedUserId) {
$currentUserId = (int) $currentUserId;
$requestedUserId = (int) $requestedUserId;

$sql = new Sql($this->tableGateway->getAdapter());

$select = $sql->select();
$select->from(array('uc' => $this->tableGateway->getTable()))
->join(array('c' => 'contacts'), 'uc.contact_id = c.contact_id');

$where = new Where();
$where
->equalTo('uc.user_id', $currentUserId)
->equalTo('c.user_id', $requestedUserId);
$select->where($where);

$dbAdapter = $this->tableGateway->getAdapter();
$string = $sql->getSqlStringForSqlObject($select);
$rowSet = $dbAdapter->query($string, $dbAdapter::QUERY_MODE_EXECUTE);

$row = $rowSet->current();
return ($row) ? true: false;
}

关于php - 选择使用双引号字符串时,mysql 上出现错误 1064 <42000>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14113648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com