关于用php调用mysql分页存储过程的例子老是出错?分页的存储过程是正确的,
调用的php代码是这样写的define('CLIENT_MULTI_RESULTS', 131072);
$mysqli = new mysqli("localhost", "root", "123456", "eimage");
if (mysqli_connect_errno()) {
  printf("Connect failed: %s\n", mysqli_connect_error());
  exit();
}
if ($result = $mysqli->query("call P_viewPage("scms_product","*","id","id>70","id desc","3","0","3","1",@$TotalCount,@$TotalPageCount)")) {  while($row = $result->fetch_row())
  {
  echo $row[2]."<br>";
  }
}
运行php的时候就会报错
Parse error: syntax error, unexpected T_STRING in D:\wamp\www\test1.php on line 14
提示是这一行出现错误if ($result = $mysqli->query("call P_viewPage("scms_product","*","id","id>70","id desc","3","0","3","1",@$TotalCount,@$TotalPageCount)"))
问下 高手我的问题出现在哪里?非常感谢

解决方案 »

  1.   

    SP代码是什么,直接在MYSQL中调用是否正常
      

  2.   

    mysql种调用正常,就是php种调用就不正常了
    存储过程的代码是CREATE PROCEDURE `P_viewPage`(  
           $TableName VARCHAR(200),  
           $FieldList VARCHAR(2000),  
           $PrimaryKey VARCHAR(100),  
           $Where VARCHAR(1000),  
           $Order VARCHAR(1000),  
           $SortType INT,  
           $RecorderCount INT,  
           $PageSize INT,  
           $PageIndex INT,  
    OUT    $TotalCount INTEGER,  
    OUT    $TotalPageCount INTEGER  
    )  
    BEGIN  IF !(($TableName is null OR $TableName='') OR ($FieldList is null OR $FieldList='') OR ($PrimaryKey is null OR $PrimaryKey='') OR $SortType < 1 OR $SortType >3 OR $RecorderCount < 0 OR $PageSize < 0 OR $PageIndex < 0) THEN  IF ($where is null OR $where='') THEN  
      SET @new_where1 = ' ' ;  
      SET @new_where2 = ' WHERE ' ;  
    ELSE  
      SET @new_where1 =concat(' WHERE ',$where);  
      SET @new_where2 =concat(' WHERE ',$where,' AND ');  
    END IF;  IF $order='' OR $SortType = 1 OR $SortType = 2 THEN  
      IF $SortType = 1 THEN  
           SET @new_order =concat(' ORDER BY ',$PrimaryKey,' ASC' );  
        END IF;  
      IF $SortType = 2 THEN  
           SET @new_order =concat(' ORDER BY ',$PrimaryKey,' DESC');  
        END IF;  
    ELSE  
      SET @new_order =concat(' ORDER BY ',$Order);  
    END IF;  SET @SqlCount = concat('SELECT COUNT(*) into @TotalCount FROM ',$TableName,@new_where1);  
    SET @SqlCount1 = concat('SELECT CEILING((COUNT(*)+0.0)/',$PageSize,') into @TotalPageCount FROM ',$TableName,@new_where1);  
    IF $RecorderCount = 0 THEN  
         PREPARE stmt1 FROM @SqlCount;  
         EXECUTE stmt1;  
         set $TotalCount=@TotalCount;  
         PREPARE stmt1 FROM @SqlCount1;  
         EXECUTE stmt1;  
         set $TotalPageCount=@TotalPageCount;  
    ELSE  
      set $TotalCount = $RecorderCount;  
    END IF;  IF $PageIndex > CEILING(($TotalCount+0.0)/$PageSize) THEN  
      SET $PageIndex = CEILING(($TotalCount+0.0)/$PageSize);  
    END IF;  IF $PageIndex = 0 or $PageIndex = 1 THEN  
       SET @Sql=concat('SELECT ',$FieldList,' FROM ',$TableName,@new_where1,@new_order,' limit ',$PageSize);  
    ELSE  
      IF $SortType = 1 THEN  
           SET @Sql=concat('SELECT ',$FieldList,' FROM ',$TableName,@new_where2,$PrimaryKey,' > (SELECT max(',$PrimaryKey,') FROM (SELECT ',$PrimaryKey,' FROM ',$TableName,@new_where1,@new_order,' limit ',$PageSize*($PageIndex-1),' ) AS TMP) ',@new_order,' limit ',$PageSize);  
      END IF;  
      IF $SortType = 2 THEN  
           SET @Sql=concat('SELECT ',$FieldList,' FROM ',$TableName,@new_where2,$PrimaryKey,' < (SELECT MIN(',$PrimaryKey,') FROM (SELECT ',$PrimaryKey,' FROM ',$TableName,@new_where1,@new_order,' limit ',$PageSize*($PageIndex-1),' ) AS TMP) ',@new_order,' limit ',$PageSize);  
        END IF;  
      IF $SortType = 3 THEN  
          IF INSTR($Order,',') > 0 THEN  
                SET @Sql=concat('SELECT ',$FieldList,' FROM ',$TableName,@new_where2,$PrimaryKey,' NOT IN (SELECT ',$PrimaryKey,' FROM (SELECT ',$PrimaryKey,' FROM ',$TableName,@new_where1,@new_order,' limit ',$PageSize*($PageIndex-1),' ) a)',@new_order,' limit ',$PageSize);  
          ELSE  
                SET @new_order =concat(' ORDER BY ',$PrimaryKey,' ASC' );  
                SET @Sql=concat('SELECT ',$FieldList,' FROM ',$TableName,@new_where2,$PrimaryKey,' > (SELECT max(',$PrimaryKey,') FROM (SELECT ',$PrimaryKey,' FROM ',$TableName,@new_where1,@new_order,' limit ',$PageSize*($PageIndex-1),' ) AS TMP) ',@new_order,' limit ',$PageSize);  
          END IF;  
      END IF;  
    END IF;  Prepare stmt2 from @Sql;  
    execute stmt2;  END IF;  
    END ;
      

  3.   

    你的PHP语法不对query("call P_viewPage("scms_product","*","id","id>70","id desc","3","0","3","1",@$TotalCount,@$TotalPageCount)")你的引号的匹配结果是这样。
      

  4.   

    if ($result = $mysqli->query("call P_viewPage('scms_product','*','id','id>70','id desc',3,0,3,1,@$TotalCount,@$TotalPageCount)")) {