一些PDO包装器可以工作,但普通PDO不能

时间:2019-12-06 15:32:32

标签: php mysql mysqli pdo

这种情况就是这样,我正在尝试连接到我可以通过phpMyAdmin Web客户端访问但现在通过php脚本访问的大学数据库。

当我尝试常规mysqli_connect()或什至像PDO一样 $pdo = new PDO("mysql:host=address; dbname=db_name", $user, $passwd); 我收到一条错误消息,告诉我服务器未正确响应或根本没有响应。

我问在那工作的IT人员,他告诉我不要使用mysqli,谷歌搜索我发现该包装器适用于旧的旧版MySQL函数,现在已弃用https://github.com/JaroslavHerber/php-mysql2pdo,该函数实际上可以连接数据库,但不要准备语句(此处显示的示例无效,prepare函数似乎未定义。

我正在寻找某种解释,如果有人知道的话,首先是什么可能导致MySQLi的问题,以及如何解决此问题,希望使用比常规查询更安全的预处理语句

我正在运行的测试脚本是这样的:

/* Database credentials*/
define('DB_SERVER', "www2.udec.cl");
define('DB_USERNAME', 'caaind');
define('DB_PASSWORD', 'somepassword');
define('DB_NAME', 'somedatabase');

/* Attempt to connect to MySQL database */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

// Check connection
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

使用存储库时,请先提及:

/* Attempt to connect to MySQL database */
$mysql_connect = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
mysql_select_db(DB_NAME, $mysql_connect);


$rPrepare = jhDb::getDb('caaind')->prepare('SELECT * FROM `Alumno` WHERE `matricula` = ?');
$rPrepare->execute(array("2015446013"));

while( $aRow = $rPrepare->fetch(PDO::FETCH_ASSOC) ) {
    print_r($aRow); // This should return same array as above mysql_fetch_assoc()
}

并作为PDO:

$dsn = "mysql:host=www2.udec.cl;dbname=caaind";
$user = "someuser";
$passwd = "somepassword";

try {    
    $pdo = new PDO($dsn, $user, $passwd);
} catch (PDOException $e){
    echo $e->getMessage();
}
$stm = $pdo->query("SELECT VERSION()");

$version = $stm->fetch();

echo $version[0] . PHP_EOL;

编辑:我正在使用php版本7.3.11

谢谢。

0 个答案:

没有答案