Php 带Docker的Zend框架,数据为空
我试图用PHP、MariaDB和Apache将我的网站对接 实际上docker正在工作,内部没有错误,每个服务之间的通信良好 但是我在PDO(SQL语法)中遇到了一个错误Php 带Docker的Zend框架,数据为空,php,mysql,docker,pdo,Php,Mysql,Docker,Pdo,我试图用PHP、MariaDB和Apache将我的网站对接 实际上docker正在工作,内部没有错误,每个服务之间的通信良好 但是我在PDO(SQL语法)中遇到了一个错误 当我用print\r打印$auth时,我得到了一个无法完全打印的大数组,里面有些东西 当我打印$this->\u auth时,我只得到一个与程序其余部分不兼容的字符串 有助于理解以下内容的部分: Notice: Trying to get property of non-object in /var/www/html/mo
- 当我用print\r打印$auth时,我得到了一个无法完全打印的大数组,里面有些东西
- 当我打印$this->\u auth时,我只得到一个与程序其余部分不兼容的字符串
Notice: Trying to get property of non-object in /var/www/html/module/MyProject/src/MyProject/Model/MenuTable.php on line 33
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AND d.TableRef = 'page') OR page.Publique = 1) AND Deconnecte = 1 ORDER BY `Ordr' at line 9' in /var/www/html/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Statement.php:240 Stack trace: #0 /var/www/html/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Statement.php(240): PDOStatement->execute() #1 /var/www/html/vendor/zendframework/zendframework/library/Zend/Db/TableGateway/AbstractTableGateway.php(233): Zend\Db\Adapter\Driver\Pdo\Statement->execute() #2 /var/www/html/vendor/zendframework/zendframework/library/Zend/Db/TableGateway/AbstractTableGateway.php(208): Zend\Db\TableGateway\AbstractTableGateway->executeSelect(Object(Zend\Db\Sql\Select)) #3 /var/www/html/vendor/zendframework/zendframework/library/Zend/Db/TableGateway/Abs in /var/www/html/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Driver/Pdo/Statement.php on line 245
菜单行33
$idInscrit = (isset($idInscrit) ? $idInscrit : (isset($this->_auth) ? $this->_auth->IDInscrit : 0));
发生PDO错误的代码部分
->where("(page.IDPage IN (
SELECT d.IDLigne
FROM inscrit i
JOIN lien_inscrit_role lir ON lir.IDInscrit = i.IDInscrit
JOIN lien_droit_role ldr ON ldr.IDRole = lir.IDRole
JOIN droit d ON d.IDDroit = ldr.IDDroit
JOIN page p ON p.IDPage = d.IDLigne
WHERE i.IDInscrit = $idInscrit
AND d.TableRef = 'page')"
. " OR page.Publique = 1)");
docker-compose.yml
version: '3.2'
services:
mariadb:
build: ./mariadb
container_name: mariadb
restart: always
ports:
- '3306:3306'
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=Europe/London
php:
build: ./php-fpm
container_name: php
ports:
- '9002:9000'
links:
- mariadb
volumes:
- .:/var/www/html/
apache:
build: .
container_name: apache
links:
- mariadb
- php
volumes:
- .:/var/www/html/
ports:
- '8085:80'
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mariadb
ports:
- '8183:80'
environment:
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- PMA_HOST=mariadb
我在本地尝试过,当我打印$this->\u auth时,我得到了一个数组,这就是我为我的docker寻找的,它可以工作
我认为问题来自于数据库和服务器之间的框架或连接
我如何解决这个问题?我们可以看到你的docker compose.yml吗?当然,我刚刚编辑了主题我们可以看到MentuTable第33行吗?啊,等等,它在下面吗?如果这是一个字符串,那么$this->\u auth->IDInscrit就是破坏代码的地方。可编辑的第33行是
$IDInscrit=(isset($IDInscrit)?$IDInscrit:(isset($this->\u auth)?$this->\u auth->IDInscrit:0))
当我在subject中输入时,我应该指定它是代码的哪一部分。$this->\u auth的字符串值是多少?
version: '3.2'
services:
mariadb:
build: ./mariadb
container_name: mariadb
restart: always
ports:
- '3306:3306'
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=Europe/London
php:
build: ./php-fpm
container_name: php
ports:
- '9002:9000'
links:
- mariadb
volumes:
- .:/var/www/html/
apache:
build: .
container_name: apache
links:
- mariadb
- php
volumes:
- .:/var/www/html/
ports:
- '8085:80'
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mariadb
ports:
- '8183:80'
environment:
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- PMA_HOST=mariadb