Php错误 - 不确定它来自何处或意味着什么?

时间:2011-04-27 00:28:55

标签: php mysql

<?php
$filename="vast/Vastopolis_Map.png";
$image = imagecreatefrompng($filename);

// get properties of the image as an array $size
// $size[0] is the width of the image in pixel
// $size[1] is the height

$size = getimagesize($filename);
$width = $size[0];
$height = $size[1];

// Set the color (red)
$ink_color = imagecolorallocatealpha ($image, 244, 1, 1, 100);
// Set line thickness if needed
// imagesetthickness($image, 5);

// get GPS locations where text meets selection criteria
// Connect to MySQL, assume the database is called vast
$dsn = 'mysql:host=localhost;dbname=vast';
$username = '###';
$passwd = '###';

$db = new PDO($dsn, $username, $passwd);

// Select text that mentions flu or fever
// Option 1: text like '%flu%' or text like '%fever%'
// Option 2: text regexp 'flu|fever'
$sql = "SELECT Location, Text FROM blogs WHERE Text LIKE '%flu%' '";
$results = $db->query($sql);

// Linear transformation to match the coordinates on the map
// The upper left corner of the map: 42.3017, 93.5673
// The lower right corner of the map: 42.1609, 93.1923
$minX = 42.3017;
$maxX = 42.1609;

$minY = 93.5673;
$maxY = 93.1923;
// Linear transformation. What does it do?
$a = $width/($maxX-$minX);
$b = -$minX*$a;

$c = $height/($maxY-$minY);
$d = -$minY*$c;

// Set the color of the markers - red
$color = imagecolorallocatealpha ($image, 250, 10, 10, 50);

// plot each location returned from the query to the database
foreach ($results as $row) {
$location = $row[0];
$pos = preg_split("/\s+/", $location); // why?
$X = $pos[0];
$Y = $pos[1];
$x = $a*$X + $b;
$y = $c*$Y + $d;
imagefilledellipse($image, $x, $y, 10, 10, $color);
}
// serve the image to the client
header ("Content-type: image/png");
imagepng($image);
imagedestroy($image);

?>

它抛出了这个令人作呕的错误,任何人?

Warning: Invalid argument supplied for foreach() on line 51

Warning: Cannot modify header information - headers already sent by  on line 61
‰PNG  IHDR` ]×ý{~÷PLTEôú ûûûèæÙãÒìæÓÔÖçæËäÎÑÐêÒÐÑæï®âæšìέéšÈê³ØâšËÔ¯ËËä¼åæ·ËзæˬÏÃÆ殭㸑ä æŽÏ®¯Ð­‰Ç—¬Æ‘Œºãó»ãÒ·Èí±ÒÆË÷˜Èù䫷⚮̭ªÌ‘›Â±šÄŠ¨Ï­­®­²®‹®°Œ’´§¬Ž’§‹‹ÄÅyä­yæ€}ò‘IÌ¥yõYĘpÃ[ùƒ+Ê8®Â{¬¬m¤¥Z±i®„X‰¬q™¢Y‹“nŽP¨¢;¤‚<‘ >„ˆ;„å}Är¦É}ƒ{ͤ|¤§v¦\¡©VŒ–v¤mX¨…\…‘2‡çppð`^ç\bêPQÔpqÊnVÒ]bÔQRíy%þjë@>ìZÌr'ÒiØA>ÍX ð=CÔ>Bë34ñ!þ"ý   Õ67Å:̧rn¥yQ¢\f«RSnm‘mLŠYo†YL£v;´e«\+±XŽf:ƒm†Y5ŒT®=F†2m„:L‚m­/1®'¾‰2+‚'Ž ƒ rÀúT¤ázª¤|¢{ˆ¢s“‰P¥¥U¨‰O‡¯[ˆƒ“þ-ƒ¸-‘¶……z£ix¡[qllŽT[¡n_ C[ƒrZ…Lxƒ:iƒU…:Sƒ2‡m4„W‚w…N2ƒg`Õsk³qsˆdZ´tU†Jx©[iƒUK±UMŽC;Ùj0‡d‡E9¬H8\ {È&mŸ$á3)®3'—&®&”­‘mmpltPmRnqQNVpmToLSUkOONqn6~jrO0kHNm5Z}NT0NNfde:.f:p#~R4/N0L-C8kf-lG8Kf4PN~~lDJ~GH*g7&~2R-/Md8sU-G63c25M#}5Jtéã°ER¶ÁSÆ3tŸwC×ëx<ñ“ÏɼøÇvæßžpvü0#V>¶[û]oGÿÏÓc{ÚhEõlóï‡1g çFû|‡Úà®–\¿^o×ö~mÏãO?ÿô`Åè^<ë®òe{öØÓ>°ý~ק íøszŠè꾪nz¤>â<äø°^÷:̶óu;ö]…:þtÜöUÍ’«6QvKn|@ÉÖL¸ëoêk8|`ítSû9«°\Ú³Ï'BÆ•¥5ڪ㎨_tû «¬tøíúív½¶;ÿÝow>»À›íÃÃÑÊÓuµýò𪪶Gœ€Õvª?”è”;Ee§`þm{az`Ÿ­åzÄyí1"‹žÝÑÎ÷ÓqTÓXÕvÖKí÷

不确定这是db错误,还是php的错误。完全失去了为什么这样做或者说它的内容。

6 个答案:

答案 0 :(得分:2)

这意味着您的$db->query($sql);返回了空结果集。

答案 1 :(得分:1)

打印警告时,会发送标题。停止foreach警告错误将消失。

答案 2 :(得分:1)

$ results不是数组。您可以使用var_dump或is_array确保它是正确的类型。

干杯

答案 3 :(得分:1)

您的查询中有一个“迷路”,这使其无效

$sql = "SELECT Location, Text FROM blogs WHERE Text LIKE '%flu%' '";

应该是

$sql = "SELECT Location, Text FROM blogs WHERE Text LIKE '%flu%'";

格式错误的查询会使$results成为错误代码而不是结果数组。由于$results中没有结果,因此您无法使用foreach而不会出现错误,因为foreach只能在数组上使用。

由于foreach会导致错误(打印并发送给用户),因此会生成“已发送的标头”错误。其中的原因和效果也将得到解决。

答案 4 :(得分:1)

尝试print_r($db->errorInfo());以获取有关可能的mysql错误的更多信息。

答案 5 :(得分:1)

我对PDO一无所知,但我可以说$结果是PDOStatement,而不是数组。

我想你可能会使用像fetch这样的方法...而不是foreach ......