[SQL] 교리 2 사용하여 원시 SQL을 실행
SQL교리 2 사용하여 원시 SQL을 실행
나는 교리 2 사용하여 원시 SQL을 실행하려면
나는 데이터베이스 테이블을 절단하고 기본 테스트 데이터로 테이블을 초기화해야합니다.
해결법
-
==============================
1.여기 교리 내가 뭘 것을 2 원시 쿼리의 예입니다 :
여기 교리 내가 뭘 것을 2 원시 쿼리의 예입니다 :
public function getAuthoritativeSportsRecords() { $sql = " SELECT name, event_type, sport_type, level FROM vnn_sport "; $em = $this->getDoctrine()->getManager(); $stmt = $em->getConnection()->prepare($sql); $stmt->execute(); return $stmt->fetchAll(); }
-
==============================
2.
//$sql - sql statement //$em - entity manager $em->getConnection()->exec( $sql );
-
==============================
3.난 당신이 PDO를 사용하는 가정이 작업을 수행하여 작업에있어.
난 당신이 PDO를 사용하는 가정이 작업을 수행하여 작업에있어.
//Place query here, let's say you want all the users that have blue as their favorite color $sql = "SELECT name FROM user WHERE favorite_color = :color"; //set parameters //you may set as many parameters as you have on your query $params['color'] = blue; //create the prepared statement, by getting the doctrine connection $stmt = $this->entityManager->getConnection()->prepare($sql); $stmt->execute($params); //I used FETCH_COLUMN because I only needed one Column. return $stmt->fetchAll(PDO::FETCH_COLUMN);
당신은 당신의 요구에 맞게에는 fetch_type을 변경할 수 있습니다.
-
==============================
4.관리자에 끼어 새로운 연결을 만들 :
관리자에 끼어 새로운 연결을 만들 :
$manager = $this->getDoctrine()->getManager(); $conn = $manager->getConnection();
쿼리 및 fetchAll 만들기 :
$result= $conn->query('select foobar from mytable')->fetchAll();
이 같은 결과에서 데이터를 가져 오기 :
$this->appendStringToFile("first row foobar is: " . $result[0]['foobar']);
-
==============================
5.나는 대답은 아마도 발견 :
나는 대답은 아마도 발견 :
출처 : 네이티브 SQL.
-
==============================
6.저도 같은 문제가 있었다. 당신은 엔티티 관리자가 제공 한 연결 개체를보고 싶지 :
저도 같은 문제가 있었다. 당신은 엔티티 관리자가 제공 한 연결 개체를보고 싶지 :
$conn = $em->getConnection();
그런 다음 쿼리 / IT에 대해 직접 실행할 수 있습니다 :
$statement = $conn->query('select foo from bar'); $num_rows_effected = $conn->exec('update bar set foo=1');
http://www.doctrine-project.org/api/dbal/2.0/doctrine/dbal/connection.html에서 연결 개체에 대한 문서를 참조하십시오
-
==============================
7.모델에서 (예를 아래에 내가 사용하지만, 자신을 대체했다 간격 날짜의 예입니다 원시 SQL 문을 작성하면 추가를 선택하고있는 경우 -. 실행] () 호출을> fetchall ().
모델에서 (예를 아래에 내가 사용하지만, 자신을 대체했다 간격 날짜의 예입니다 원시 SQL 문을 작성하면 추가를 선택하고있는 경우 -. 실행] () 호출을> fetchall ().
$sql = "DELETE FROM tmp WHERE lastedit + INTERVAL '5 minute' < NOW() "; $stmt = $this->getServiceLocator() ->get('Doctrine\ORM\EntityManager') ->getConnection() ->prepare($sql); $stmt->execute();
-
==============================
8.당신은, 교리 2 원시 쿼리를 허용하지 않습니다 수 없습니다. 당신은 그러나 당신이 뭔가를 시도 할 경우 것처럼 보일 수 있습니다 :
당신은, 교리 2 원시 쿼리를 허용하지 않습니다 수 없습니다. 당신은 그러나 당신이 뭔가를 시도 할 경우 것처럼 보일 수 있습니다 :
$sql = "SELECT DATE_FORMAT(whatever.createdAt, '%Y-%m-%d') FORM whatever..."; $em = $this->getDoctrine()->getManager(); $em->getConnection()->exec($sql);
교리는 DATE_FORMAT 알 수없는 기능입니다 없다는 오류 침을 것입니다.
하지만 내 데이터베이스 (MySQL은) 그래서 기본적으로이 생긴 어떤 교리가 배후에서 해당 쿼리를 파싱 (그리고 뒤로)과 식을 찾는 것이 이해하지 않는, 무효로 쿼리를 고려하고, 그 기능을 알고 않습니다.
나처럼 당신은 단순히 데이터베이스에 문자열을 보내고 그것을 처리 할 수 있습니다 (그리고 개발자는 보안에 대한 모든 책임을 보자) 싶다면, 그것을 잊지.
물론 당신은 어떤 방식 으로든 것을 허용하는 확장을 코딩 할 수 있지만, 당신은뿐만 아니라 그것을 떨어져을하고 그것의 ORM의 사업입니다에 교리를 떠나 mysqli를 사용하여.
from https://stackoverflow.com/questions/3325012/execute-raw-sql-using-doctrine-2 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 SQL은 : 특정 항목을 먼저하고 그 다음 나머지 항목을 정렬 (0) | 2020.04.13 |
---|---|
[SQL] SQL은 두 개의 테이블에서 데이터를 비교 (0) | 2020.04.13 |
[SQL] SQL 서버에서 지난 달의 레코드를 가져 오기 (0) | 2020.04.13 |
[SQL] 테이블의 열 수를 찾기 (0) | 2020.04.13 |
[SQL] Select 문에서 케이스 (0) | 2020.04.13 |