我有一个简化的ajay脚本,我从中删除了所有不相关的代码。我遇到的问题首先是我的columns数组和随后的foreach循环。我想通过每个元素并将相应的元素更改为YES(如果为true)和NO(如果为false),我不明白为什么它不起作用。
如果出现语法错误或大括号等问题,则简化我的代码会出现问题,而且我的机器上的版本不存在问题。
<?php
$con = mysqli_connect("localhost", "", "", "");
if (!$con) {
echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
exit;
}
$con->set_charset("utf8");
$query1 = 'SELECT EGGS, SALAD, TREES, REVISED FROM AUCTIONS WHERE ARTICLE_NO = ?';
if ($getRecords = $con->prepare($query1)) {
$getRecords->bind_param("s", $pk);
$getRecords->execute();
$getRecords->bind_result($EGGS, $SALAD, $TREES, $REVISED);
while ($getRecords->fetch()) {
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
$$column = $columns[$column] ? 'YES' : 'NO';
}
imageSize = imageResize($PIC_URL, 250, 300);
echo "<h1>".$EGGS."</h1>";
}
}
function imageResize($imageURL, $maxWidth, $maxHeight) {
$imageSize["width"] = 0;
$imageSize["height"] = 0;
$size = getimagesize($imageURL);
if ($size) {
$imageWidth = $size[0];
$imageHeight = $size[1];
$wRatio = $imageWidth / $maxWidth;
$hRatio = $imageHeight / $maxHeight;
$maxRatio = max($wRatio, $hRatio);
if ($maxRatio > 1) {
$imageSize["width"] = $imageWidth / $maxRatio;
$imageSize["height"] = $imageHeight / $maxRatio;
return $imageSize;
} else {
$imageSize["width"] = $imageWidth;
$imageSize["height"] = $imageHeight;
return $imageSize;
}
} else {
die(print_r(error_get_last()));
}
}
答案 0 :(得分:1)
您的循环错误 - $ columns ['EGGS']不存在:
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
$$column = $columns[$column] ? 'YES' : 'NO';
}
它应该是:
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
$$column = $$column ? 'YES' : 'NO';
}
或更好:
$tmp = array();
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
$tmp[$column] = $$column ? 'YES' : 'NO';
}
这样你就不会覆盖你的绑定变量。
还要注意,出于性能原因,您应该在while()
循环之外移动该常量数组声明。
答案 1 :(得分:1)
但我只是想补充说,虽然使用像$$ COLUMN这样的变量似乎是一个很好的功能,但它后来会变得非常混乱并产生很多额外的变量。
为什么不创建一个临时数组,保留所有YES / NO对?
此外,PHP不允许变量包含数字。我不知道当您创建这样的变量时会发生什么:
$name = "123variable";
$$name = "foo";
我必须检查出来。
编辑:我刚看到您将查询结果仅绑定到某些变量。我仍然认为这不是一个好的编码风格。
答案 2 :(得分:0)
$columns[$column]
不存在 - 我无法想象你想要做什么,但这是一个错误。
答案 3 :(得分:0)
从
更改循环foreach($columns as $column) {
$$column = $columns[$column] ? 'YES' : 'NO';
}
要:
foreach($columns as $key=>$column) {
$$column = $columns[$key] ? 'YES' : 'NO';
}
答案 4 :(得分:0)
将循环更改为:
foreach($columns as $column) {
$$column = $$column ? 'YES' : 'NO';
}