我是PHP/MySQL的新手,我正在学习的东西.我学到的一个新事物是,对于给定的用户名,可以为数据库建立最大数量的连接.当我第一次开始在Wordpress上构建我的网站时,我使用的是旧的mysql_query()命令.我从来没有必要连接到MySQL数据库,因为Wordpress只是通过登录网站保持活动连接.当我决定将所有MySQL查询切换到PDO扩展时,我再也无法利用Wordpress的活动连接,并且必须启动自己的数据库连接.我在一个单独的PHP配置文件中执行了此操作,该文件包含在运行脚本的每个页面中.PHP代码如下所示:
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
}
catch(PDOException $e) {
echo "Select DB Error: " .$e->getMessage(). "</br>";
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我经常遇到以下错误:
"SQLSTATE [42000] [1203]用户已超过'max_user_connections'活动连接"
基于一些在线研究,我尝试了各种不同的方法来解决这个问题.首先,我尝试在每个脚本的末尾将数据库连接设置为null(尽管这应该是PHP PDO的默认值?).然后我尝试null在数据库的每次查询之后设置每个语句句柄(这是一个毫无希望的努力).最后,我尝试通过更改配置文件中的以下行来使用持久连接:
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, array(PDO::ATTR_PERSISTENT => true));
Run Code Online (Sandbox Code Playgroud)
这似乎都不起作用,我仍然得到同样的错误.该网站准备好后,每天需要能够处理100-200人,输入大量不同的数据.即使我可以弄清楚如何利用Wordpress的PDO主动连接,这将是一个良好的开端.我很感激我能得到任何帮助.
更新:
我在我的SHOW FULL PROCESSLIST一个代码中运行MySQL查询,我的行为非常奇怪.这是我脚本的第一部分(不包括SHOW FULL PROCESSLIST查询):
<?php
include 'config.php';
if(isset($_POST['submit']))
{
//Get Current User Login
global $current_user;
$current_user = wp_get_current_user();
$ulog = $current_user->user_login;
$tablename_cc = "cc_".$ulog;
$tablename_db = "db_".$ulog;
$tablename_misc = "misc_".$ulog;
$tablename_cash = "cash_".$ulog;
try { …Run Code Online (Sandbox Code Playgroud) 我正在尝试将所有MySQL连接从旧的mysql_query切换到PDO.我正在尝试使用不同的数组更新MySQL表的多个行和列,我收到以下错误:
[42000]:语法错误或访问冲突:1064 SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在'(accnt,car,radio,misc)值附近使用正确的语法('admin','300.00','400.00','10 .00')WHERE ID'在线1
从以下代码:
$account = $_POST['account'];
$car_lease = $_POST['car_lease'];
$radio_lease = $_POST['radio_lease'];
$misc_lease = $_POST['misc_lease'];
$lease_ID = $_POST['lease_ID'];
//$data = array_map(null,$account,$car_lease,$radio_lease,$misc_lease);
$A = count($lease_ID);
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$STH = $DBH->prepare('UPDATE lease (accnt, car, radio, misc) values (:account, :car_lease, :radio_lease, :misc_lease) WHERE ID = :lease_ID');
$i = 0;
while($i < $A) {
$STH->bindParam(':account', $account[$i]);
$STH->bindParam(':car_lease', $car_lease[$i]);
$STH->bindParam(':radio_lease', $radio_lease[$i]);
$STH->bindParam(':misc_lease', $misc_lease[$i]);
$STH->bindParam(':lease_ID', $lease_ID[$i]);
$STH->execute();
$i++;
}
}
catch(PDOException $e) …Run Code Online (Sandbox Code Playgroud) 我不知道还有什么可以称之为标题...我有一个访问某个MySQL数据库的PHP页面,从表中提取值,并将它们放在HTML表单中(POST方法 - PHP_SELF).然后,用户可以查看值,根据需要更改它们并提交它们.然后页面获取这些值并更新MySQL数据库.一切都很完美,除了当用户提交并且页面显示新的更新变量时,它仍然显示旧值.在新变量出现之前,用户被强制刷新页面.我认为PHP可能没有删除变量,所以我在脚本结束后取消设置所有存储的变量并且它仍然无法正常工作.我曾尝试在脚本启动之前安装睡眠定时器,但这也无效.我很感激任何建议.这是我的脚本仅供参考:
<html>
<body>
<?php
$sql = "SELECT * FROM lease";
$result = mysql_query($sql);
?>
<form id="lease_update" method="post" action="<?php echo htmlentities($PHP_SELF); ?>">
<table>
<tr>
<th>Account</th>
<th>Car Lease</th>
<th>Radio Lease</th>
<th>Misc. Charges</th>
</tr>
<?php
while($rows = mysql_fetch_array($result)){
?>
<tr>
<td><input type="text" name="account[]" value="<?php echo $rows['accnt']; ?>" /></td>
<td><input type="int" name="car_lease[]" value="<?php echo $rows['car']; ?>" /></td>
<td><input type="int" name="radio_lease[]" value="<?php echo $rows['radio']; ?>" /> </td>
<td><input type="int" name="misc_lease[]" value="<?php echo $rows['misc']; ?>" /></td>
<input type="hidden" name="lease_ID[]" value="<?php echo $rows['ID']; ?>" /> …Run Code Online (Sandbox Code Playgroud) 我正在使用一些if语句运行一个简单的for循环.在这个for循环中,3个变量将被赋予一个值,具体取决于for循环中的索引值.看起来相当简单,当我运行代码时,值总是为零,我不知道为什么会发生这种情况.我的for循环在下面提供.我很感激任何建议.
double A [N+1];
double r;
double s;
double v;
for(int i = 2; i < N+1; i++)
{
if(i == 2)
{
r = 1/2/i/(i-1);
s = -1/2/(i*i - 1);
v = 1/4/i/(i+1);
}
else if(i <= N-2 && i > 2)
{
r = 1/4/i/(i-1);
s = -1/2/(i*i - 1);
v = 1/4/i/(i+1);
}
else if(i <= N-4 && i > N-2)
{
r = 1/4/i/(i-1);
s = 0;
v = 1/4/i/(i+1);
}
else
{
r = 1/4/i/(i-1); …Run Code Online (Sandbox Code Playgroud)