好像数组在php中没有设置

时间:2018-01-19 06:55:43

标签: php

我有一个很长的php脚本,它在linux后端运行,用另一个值来更新数据库。但是在我的循环中它第二次得到未定义的偏移量,当我只使用代码片段进行循环时它工作得很完美,不知道它还能是什么

PHP代码段:

$schema = $con->query("SELECT INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME, users.customers.Name, users.customers.Server from INFORMATION_SCHEMA.SCHEMATA inner join users.customers on INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME=users.customers.Name order by Server asc;");
while( $row = mysqli_fetch_assoc($schema)){                                                                                                                                     
$sResult[] = $row;                                                                                                                                                          
}

$sLenght = sizeof($sResult);

$rConnectzaTwo = pg_connect("host=*** dbname=*** user=*** password=***") or die("Could not connect");
$rConnectzaFour = pg_connect("host=*** dbname=*** user=hein password=***") or die("Could not connect");
$rConnectzaFive = pg_connect("host=*** dbname=*** user=*** password=***") or die("Could not connect");

for ($i = 0; $i < $sLenght; $i++) {
    $companyName = $sResult[$i]['SCHEMA_NAME'];

    if ($sResult[$i]['Server'] == 'ZA02') {
       $rConnect = $rConnectzaTwo;
    } elseif ($sResult[$i]['Server'] == 'ZA04') {
       $rConnect = $rConnectzaFour;
    } elseif ($sResult[$i]['Server'] == 'ZA05') {
       $rConnect = $rConnectzaFive;
}

PHP编辑代码:

$schema = $con->query("SELECT INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME, users.customers.Name, users.customers.Server from INFORMATION_SCHEMA.SCHEMATA inner join users.customers on INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME=users.customers.Name order by Server asc;");
while( $row = $schema->fetch_assoc()){                                                                                                                                     
$sResult[] = $row;                                                                                                                                                          
}

$sLenght = sizeof($sResult);

$rConnectzaTwo = pg_connect("host=*** dbname=*** user=*** password=***") or die("Could not connect");
$rConnectzaFour = pg_connect("host=*** dbname=*** user=hein password=***") or die("Could not connect");
$rConnectzaFive = pg_connect("host=*** dbname=*** user=*** password=***") or die("Could not connect");

for ($i = 0; $i < $sLenght; $i++) {
    $companyName = $sResult[$i]['SCHEMA_NAME'];

    if ($sResult[$i]['Server'] == 'ZA02') {
       $rConnect = $rConnectzaTwo;
    } elseif ($sResult[$i]['Server'] == 'ZA04') {
       $rConnect = $rConnectzaFour;
    } elseif ($sResult[$i]['Server'] == 'ZA05') {
       $rConnect = $rConnectzaFive;
}

2 个答案:

答案 0 :(得分:0)

你将mysqli面向对象与程序

混合在一起

像这样改变

$schema = $con->query("SELECT INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME, users.customers.Name, users.customers.Server from INFORMATION_SCHEMA.SCHEMATA inner join users.customers on INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME=users.customers.Name order by Server asc;");
while($row = $schema->fetch_assoc()){                                                                                                                                     
$sResult[] = $row;                                                                                                                                                          
}

答案 1 :(得分:0)

您可以直接清理代码,并在循环结果集之前编写$con_config查找数组,使其易于管理和阅读。

$con_config=[
    'ZA02'=>['host'=>'***','dbname'=>'***','user'=>'***','password'=>'***'],
    'ZA04'=>['host'=>'***','dbname'=>'***','user'=>'hein','password'=>'***'],
    'ZA05'=>['host'=>'***','dbname'=>'***','user'=>'***','password'=>'***'],
];

if(!$schema=$con->query("SELECT A.SCHEMA_NAME, B.Name, B.Server FROM INFORMATION_SCHEMA.SCHEMATA A INNER JOIN users.customers B ON A.SCHEMA_NAME=B.Name ORDER BY Server ASC;")){
    // handle the error as you wish
}else{
    while($row=$schema->fetch_assoc()){                      
        if(!isset($con_config[$row['Server']])){
            // handle unlisted server value; no connection credentials for this server  
        }else{
            $credentials=$con_config[$row['Server']];
            if(!$rConnect=pg_connect("host={$credentials['host']} dbname={$credentials['dbname']} user={$credentials['user']} password={$credentials['password']}"){
                // handle the error as you wish: $error = error_get_last(); echo "Connection failed. Error was: ". $error['message']
            }else{
                // ... continue your script and use $rConnect as you like
            }
        }
    }
}