Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL字段ID值正在更改_Php_Mysql_Pdo_Mysqli - Fatal编程技术网

Php MYSQL字段ID值正在更改

Php MYSQL字段ID值正在更改,php,mysql,pdo,mysqli,Php,Mysql,Pdo,Mysqli,数据库: 列表 | ID | TITLE | COMPANY_ID | | 1 | One | 1 | | 2 | One | 1 | | 3 | One | 1 | 公司 | ID | NAME | | 1 | One | | 2 | Two | | 3 | Three | 我有PDO MYSQL语句: "SELECT listi

数据库:

列表

|  ID  |  TITLE  |  COMPANY_ID  |
|  1   |   One   |      1       |
|  2   |   One   |      1       |
|  3   |   One   |      1       |
公司

|  ID  |  NAME  |
|  1   |   One  |
|  2   |   Two  |
|  3   |  Three |
我有PDO MYSQL语句:

"SELECT 
listings.ID,
listings.TITLE,
listings.COMPANY_ID,
companies.ID,
companies.NAME 
FROM listings INNER JOIN companies ON (listings.COMPANY_ID = companies.ID ) WHERE (listings.TITLE = :p1 AND companies.NAME = :p2 )LIMIT 10"
关联数组输出:

Array
(
    [ID] => 1
    [TITLE] => analyst
    [COMPANY_ID] => 1
    [NAME] => one
)
Array
(
    [ID] => 1
    [TITLE] => analyst
    [COMPANY_ID] => 1
    [NAME] => one
)
Array
(
    [ID] => 1
    [TITLE] => analyst
    [COMPANY_ID] => 1
    [NAME] => one
)
执行此查询时,将输出到PHP fetch关联数组的my ID字段返回为1

除了ID之外,输出按预期工作

为什么我的ID值在变化

______________________
方法:

protected function search_joined($parameters, $func){
        $field = "*";
        if(isset($parameters["fields"])){
            if($parameters["fields"] != "*" && gettype($parameters["fields"]) == gettype(array())){
                if(count($parameters["fields"]) == 2){
                    $field = "";
                    foreach($parameters["fields"] as $key=>$v){
                        foreach($v as $v_){
                            $field.= $parameters["tables"][$key] . "." . $v_ . ",";
                        }
                    }
                    $field = rtrim($field, ",");
                }
            }
        }

        $cond_ = "";
        $values = array();      
        if(gettype($parameters["condArry"]) == gettype(array())){
            $COND_TYPE = " AND ";
            foreach($parameters["condArry"] as $v){
                $operator = " = ";
                if($v[1][0] == "%" || substr($v[1], -1) == "%"){
                    $operator=" LIKE ";
                }
                if(substr($v[1], 5) == "L::_>"){
                    $operator=" > ";
                    $v[1] = str_replace($v[1], "L::_>", "");
                }
                if($v[1][0] == "!"){
                    $operator=" != ";
                    //$v[1] = str_replace($v[1], "!", "");
                    $v[1] = substr($v[1], 1);
                }
                $COND_TYPE = (
                    (isset($v[2]))? 
                        (
                            ($v[2] == "&")? " AND " : 
                                (
                                    (($v[2]=="||")? " OR ": "")
                                )
                        ): " AND "
                );
                $unique = md5($v[0] . $v[1]);

                $cond_.= $v[0] . $operator . ":".substr($v[0], strpos($v[0], ".") + 1).$unique. " " . $COND_TYPE . " ";
                $values[':'.substr($v[0], strpos($v[0], ".") + 1).$unique] = $v[1];
            }
            $cond_ = "WHERE (" . substr($cond_, 0, strlen($COND_TYPE)*(-1)) . ")";
        }

        //$cond_ = rtrim($cond_, ",");
        $joiner = $parameters["tables"][0] . "." . $parameters["joiner"][0] . "=" . $parameters["tables"][1] . "." . $parameters["joiner"][1] . " ";

        $sql = "SELECT ". $field . " FROM " . $parameters["tables"][0] . " INNER JOIN " . $parameters["tables"][1] . " ON (" . $joiner . ") " .$cond_ . (isset($parameters["LIMIT"])? "LIMIT " . $parameters["LIMIT"]: "");
        echo $sql;
        if(isset($parameters["test"])){
            if($parameters["test"] == true){
                echo "<br>". $sql . "<br>";
            }
        }
        //echo "<br>". $sql . "<br>";
        $q = $parameters["connection"]->prepare($sql);

        foreach($values as $key => $v){
            $q->bindvalue($key, $v);
            echo "<br>" . $key . " : " . $v . "<br>";
        }
        $q->execute();
        while($row = $q->fetch(PDO::FETCH_ASSOC)) {
            if(!$func($row)){
                break;
            }
        }
        $conTableArry = null;
    }

您应该能够通过为结果集使用唯一的列名来解决这个问题(您当前使用了
ID
两次)

将SQL更改为以下内容:

"SELECT 
    listings.ID,
    listings.TITLE,
    listings.COMPANY_ID,
    companies.ID AS CID,
    companies.NAME 
FROM listings
    INNER JOIN companies ON (listings.COMPANY_ID = companies.ID )
WHERE (listings.TITLE = :p1
    AND companies.NAME = :p2 )LIMIT 10"

注意第五行。我已将其从
companys.ID
更改为
companys.ID作为CID

您应该能够通过为结果集使用唯一的列名来解决此问题(您当前使用
ID
两次)

将SQL更改为以下内容:

"SELECT 
    listings.ID,
    listings.TITLE,
    listings.COMPANY_ID,
    companies.ID AS CID,
    companies.NAME 
FROM listings
    INNER JOIN companies ON (listings.COMPANY_ID = companies.ID )
WHERE (listings.TITLE = :p1
    AND companies.NAME = :p2 )LIMIT 10"

注意第五行。我已将其从
companys.ID
更改为
companys.ID作为CID

您的SQL中有一些令人困惑的语法

SELECT 
     listings.ID,
     listings.TITLE,
     listings.COMPANY_ID,
     companies.ID,
     companies.NAME 
FROM listings 
     INNER JOIN companies ON (listings.COMPANY_ID = companies.ID ) 
WHERE (listings.TITLE = :p1 AND companies.NAME = :p2 )
LIMIT 10
您有两个
ID
列,并且没有别名。因此,您可能会得到第二个
ID
返回。尝试对第二个
ID
列使用别名,然后重试

SELECT 
     listings.ID,
     listings.TITLE,
     listings.COMPANY_ID,
     companies.ID AS comp_id,
     companies.NAME

SQL中有一些令人困惑的语法

SELECT 
     listings.ID,
     listings.TITLE,
     listings.COMPANY_ID,
     companies.ID,
     companies.NAME 
FROM listings 
     INNER JOIN companies ON (listings.COMPANY_ID = companies.ID ) 
WHERE (listings.TITLE = :p1 AND companies.NAME = :p2 )
LIMIT 10
您有两个
ID
列,并且没有别名。因此,您可能会得到第二个
ID
返回。尝试对第二个
ID
列使用别名,然后重试

SELECT 
     listings.ID,
     listings.TITLE,
     listings.COMPANY_ID,
     companies.ID AS comp_id,
     companies.NAME

显示实际的pdo代码。我们无法帮助您。需要显示您的php代码。好的,但是如果您因为缺少资源而不理解某些内容,请不要抱怨。我现在将用一个片段更新帖子。我确信问题是mysql语句,而不是PHP。我从未调用过更改ID或ID的关联值。问题是您对两列使用了
ID
。PHP选择使用
companys.ID
(由于您的加入条件,该值始终为1)。如果您将
companys.ID改为CID
,则数组中将有5个元素,而不是4个(新的元素是CID)。显示实际的pdo代码。我们无法帮助您。需要显示您的php代码。好的,但是如果您因为缺少资源而不理解某些内容,请不要抱怨。我现在将用一个片段更新帖子。我确信问题是mysql语句,而不是PHP。我从未调用过更改ID或ID的关联值。问题是您对两列使用了
ID
。PHP选择使用
companys.ID
(由于您的加入条件,该值始终为1)。如果您将
companys.ID改为CID
,则数组中将有5个元素,而不是4个(新的元素是CID)。是的,在我的ID上使用AS LID解决了这个问题。目前,我正在从参数(调用者)扩展它。我需要编写另一种方法来检测这种情况。非常感谢。是的,用我的身份证明解决了这个问题。目前,我正在从参数(调用者)扩展它。我需要编写另一种方法来检测这种情况。非常感谢。你的答案也是正确的,但帕特里克在关键点上击败了你!你的答案也是正确的,但帕特里克在关键点上击败了你!