문제

다음 코드가 있습니다.

$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("ss", $table, $brand);
    $numRecords->execute();
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = mysql_num_rows($data);
    $rows = getRowsByArticleSearch($query, $table, $max);
    $last = ceil($rowcount/$page_rows);
}

잘 작동합니다. 그러나 나는 다음과 같은 오류를받습니다.

SQL 구문에 오류가 있습니다. 오른쪽 구문이 근처에 사용될 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 1 행에서 '%?%' '와 같은 상위 (article_name)가있는 곳

내가 넣으면

SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '% o %';

쿼리는 잘 작동합니다. $ 테이블은 위에 정의되어 있으며 쿼리는 get에서 수신되며 둘 다 올바른 유효한 값입니다. 이것이 실패한 이유는 무엇입니까?

편집 : 변경 :

$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE '% ? %'";

if ($numRecords = $con->prepare($countQuery)) {

    $numRecords->bind_param("s", $query);

오류가 발생합니다.

경고 : mysqli_stmt :: bind_param () [mysqli-stmt.bind-param] : c : program 파일의 준비 문서에서 변수 수가 일치하지 않습니다. easyphp 3.0 www prog get_records.php 38

동기화 된 명령; 지금이 명령을 실행할 수 없습니다

반면

$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ?";

if ($numRecords = $con->prepare($countQuery)) {

    $numRecords->bind_param("s", "%".$query."%");

결과

치명적인 오류 : c : program files easyphp 3.0 www prog get_records.php 38에서 참조로 매개 변수 2를 전달할 수 없습니다.

그리고 마지막으로

$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ? ";

if ($numRecords = $con->prepare($countQuery)) {

    $numRecords->bind_param("s", $query);

만 제공 할 것입니다 :

동기화 된 명령; 지금이 명령을 실행할 수 없습니다

같은 통계에 매개 변수를 사용하는 것이 불가능합니까?

도움이 되었습니까?

해결책

을 위한 LIKE 조항, 이것을 사용하십시오 :

SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE CONCAT('%', ?, '%')

테이블 이름은 테이블 이름을 매개 변수로 갖는 것이 매우 나쁜 연습입니다.

어떤 이유로 든 여전히해야한다면 쿼리를 준비하기 전에 쿼리 텍스트에 포함시켜야합니다.

$countQuery = "SELECT ARTICLE_NO FROM $table_name WHERE upper(ARTICLE_NAME) LIKE CONCAT('%', ? ,'%')";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = mysql_num_rows($data);
    $rows = getRowsByArticleSearch($query, $table, $max);
    $last = ceil($rowcount/$page_rows);
}

다른 팁

발행 했습니까?

mysqli_free_result($result);

마지막 쿼리 후? 이것이 동기화 오류의 명령입니다.

그러나 이것은 작동해야합니다

$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ?";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", "%".$query."%");

$ query 변수에 무엇이 있는지 궁금합니다. 대신 이것을 시도하십시오

$query = '%'.$query.'%';
$numRecords->bind_param("s", $query);

대신 다음을 시도하십시오.

$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE ?";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("ss", $table, "%$brand%");
    $numRecords->execute();
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = mysql_num_rows($data);
    $rows = getRowsByArticleSearch($query, $table, $max);
    $last = ceil($rowcount/$page_rows);
}

Afaik MySQLI를 가진 식별자 및 진술을 준비하는 자리 표시자를 사용할 수 없습니다. 따라서 쿼리에 테이블 이름을 수동으로 보간해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top