- 更新微软源,需要安装微软的底层库
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo
- 安装依赖底层库
yum install -y msodbcsql mssql-tools unixODBC-devel
- 根据php版本选择对应的pdo_sqlsrv扩展版本,查询地址为http://pecl.php.net/package/pdo_sqlsrv 对于7.4版本可以用5.10.1的版本
- 下载对应版本的pdo_sqlsrv
wget http://pecl.php.net/package/pdo_sqlsrv wget http://pecl.php.net/get/pdo_sqlsrv-5.10.1.tgz
- 编译安装,代码语句一行一行执行
tar -zxvf pdo_sqlsrv-5.10.1.tgz cd pdo_sqlsrv-5.10.1 /www/server/php/74/bin/phpize ./configure --with-php-config=/www/server/php/74/bin/php-config make && make install echo "extension = pdo_sqlsrv.so" >> /www/server/php/74/etc/php.ini echo "extension = pdo_sqlsrv.so" >> /www/server/php/74/etc/php-cli.ini /etc/init.d/php-fpm-74 reload
需要把相关路径替换为自己的实际路径 - 检查是否安装成功
/www/server/php/74/bin/php -m|grep -i sqlsrv
- 连接数据库并测试
` <?php
$host = "155.254.244.31";
$dbname = "AionWorld_110";
$user = "urygdc17463_SQLLogin_1_d6octrr7tr";
$pass = "urygdc17463_SQLLogin_1_d6octrr7tr";
try {
// 创建数据库连接
$dbh = new PDO("sqlsrv:Server=$host;Database=$dbname", $user, $pass);
// 创建表格
$createTableQuery = "CREATE TABLE MyTable (
id INT PRIMARY KEY,
name VARCHAR(100)
)";
$dbh->exec($createTableQuery);
echo "表格创建成功!\n";
// 插入数据
$insertDataQuery = "INSERT INTO MyTable (id, name) VALUES (1, 'John'), (2, 'Jane'), (3, 'Mike')";
$dbh->exec($insertDataQuery);
echo "数据插入成功!\n";
// 读取数据
$selectDataQuery = "SELECT * FROM MyTable";
$stmt = $dbh->query($selectDataQuery);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo "ID: " . $row['id'] . ", Name: " . $row['name'] . "\n";
}
// 关闭数据库连接
$dbh = null;
} catch (PDOException $e) {
echo "连接数据库失败: " . $e->getMessage();
}
?>
8. 不出意外的话,遇到了意外,经过反复测试活segmentfault,换装其他版本php同样问题,凭感觉,应该是ssl出问题了。 进过排查,发现是安装node.js修改了系统环境,导致openssl不同版本混合调用,删除node.js环境正常。定位问题的关键点:1、更换了3个php版本,都会报错,可以判断是系统问题,和php版本无关 2、 挂gdb测试最简单的连接代码,抛出堆栈,搜索答案无果,经过仔细观察发现openssl存在不同版本混合调用问题,根据文件创建日期判断同一天的新建文件,判断出pm2和node.js有问题,卸载后openssl指定版本确实也被卸载了,问题解决。 挂上gdb调试后打印部分堆栈如下:
0 0x00007ffff2786ec6 in __strcmp_sse42 () from /lib64/libc.so.6
1 0x00007ffff645dc65 in lh_insert () from /usr/local/openssl/lib/libcrypto.so.1.0.0
2 0x00007ffff63ac37f in OBJ_NAME_add () from /usr/local/openssl/lib/libcrypto.so.1.0.0
3 0x00007fffe8449c18 in ossl_init_ssl_base_ossl_ () from /lib64/libssl.so.1.1
4 0x00007ffff222f20b in __pthread_once_slow () from /lib64/libpthread.so.0
5 0x00007fffe811cd29 in CRYPTO_THREAD_run_once () from /lib64/libcrypto.so.1.1
6 0x00007fffe8449e63 in OPENSSL_init_ssl () from /lib64/libssl.so.1.1
`
标签:echo,sqlsrv,server,pdo,版本,sql,php From: https://www.cnblogs.com/ynhi/p/18014218