【问题标题】:Trouble inserting JSON object into MySQL table in PHP在 PHP 中将 JSON 对象插入 MySQL 表时遇到问题
【发布时间】:2013-11-09 08:06:09
【问题描述】:

我在我的 PHP 代码中调用了一个返回 JSON 的 Rest API。我想将其中的某些部分保存到我的数据库中,但由于某种原因,没有存储任何内容。 JSON 应该是这样的:

{
"url": "http://myURL.com/fujifilm-mx1700.jpg",
"mimeType": "image/jpeg",
"width": 640,
"height": 480,
"byteSize": 100227,
"exif": {"YResolution": "72/1", "Tag0xa217": "2", "ResolutionUnit": "Inch", "Compression": "6", "Copyright": "", "Tag0xa300": "[ 3 ]", "Make": "FUJIFILM", "Flash": "no", "DateTime": "2000:09:02 14:30:10", "MaxApertureValue": "3.3", "YCbCrPositioning": "2", "XResolution": "72/1", "JPEGInterchangeFormatLength": "4354", "ExposureBiasValue": "0.0", "ExposureProgram": "Program Normal", "ShutterSpeedValue": "1/169", "ColorSpace": "1", "Tag0xa20e": "1087/1", "Tag0xa20f": "1087/1", "ExifImageWidth": "640", "DateTimeDigitized": "2000:09:02 14:30:10", "DateTimeOriginal": "2000:09:02 14:30:10", "BrightnessValue": "76/10", "CompressedBitsPerPixel": "2/1", "Interoperability_IFD_Pointer": "708", "FNumber": "7", "ApertureValue": "5.6", "Tag0xa210": "3", "FocalLength": "9.9", "Tag0xa000": "[ 48,49,48,48 ]", "ComponentsConfiguration": "[ 1,2,3,0 ]", "ExifImageHeight": "480", "ISOSpeedRatings": "125", "Model": "MX-1700ZOOM", "Software": "Digital Camera MX-1700ZOOM Ver1.00", "Orientation": "1", "Tag0xa301": "[ 1 ]", "JPEGInterchangeFormat": "856", "MeteringMode": "5", "ExifVersion": "[ 48,50,49,48 ]"}
}

这是我的 PHP

$exif = file_get_contents('http://img2json.appspot.com/go/?url=http://myURL.com/$fileName');
$response = json_decode($response, true);

foreach($response['exif'] as $item) {

$iso = $item['ISOSpeedRatings'];
$shut = $item['ShutterSpeedValue'];

$sql="INSERT INTO EXIF (uniqueID, ISO, shutterSpeed)
VALUES('$id','$iso','$shut')";  

    if (!mysql_query($sql,$link)) {
    die('Error: ' . mysql_error());
    }
}

我想将 ISOSpeedRatings 和 ShutterSpeedValue 存储在我的数据库中,但它们总是空着。

我怀疑它不起作用,因为我没有正确地从 JSON 中检索我想要的数据,但我不太确定该怎么做。另外,我认为值得注意的是我正在使用 AppFog,所以我必须确保我的 .htaccess 中有php_value allow_url_fopen 1,因为我无法访问 php.ini 文件。任何帮助,将不胜感激。

【问题讨论】:

  • 尝试var_dump($response); 看看响应是否正确以及如何设置
  • 这段代码实际上从未见过,而是从另一个页面调用以定期存储数据。我在哪里可以找到 var_dump 的结果?

标签: php mysql sql json .htaccess


【解决方案1】:

PHP 字符串插值(使它用字符串中的值替换变量名)仅在双引号字符串中有效(据我所知)。如果我没看错,而且我的大脑在深夜仍然在工作,那么你的问题就在这里:

    $exif = file_get_contents('http://img2json.appspot.com/go/?url=http://myURL.com/$fileName');

因为您实际上是在请求文件 '$filename' 而不是该变量中实际存在的任何内容。用双引号替换单引号,看看是否能解决问题。

更新:下一个问题:

    $response = json_decode($response, true);

您需要解码$exif 变量。

【讨论】:

  • 我相信你是对的,所以我修正了这个问题。我的桌子仍然空着。我不知道为什么,但我对我拥有的 foreach 循环不是很有信心(部分原因是我只在寻找一个“exif”实例),以及我正在使用@987654325 的事实@.
  • 您列出的响应中是否应该返回多个对象,还是只有一个?因为有了该响应,您将要做的是循环遍历仅包含 exif 数据的关联数组的每个键值。只需完全取消循环并使用$response['exif']['ISOSpeedRatings'] 等..
  • 只有一个。基本上,这个文件在图像上传时被调用来存储图像,并获取它的 exif 数据。
  • 我可能在您阅读后编辑了我的最后一条评论(深夜,大脑不工作,忘记了一句话)。只需摆脱循环并直接处理 $response['exif'] 变量即可。
  • 现在试试。由于某种原因,事情发生了变化,现在我之前存储在另一个表中的数据停止工作。我一会儿再回帖。
【解决方案2】:

尝试使用urlencode() 准备您的urlstring。

【讨论】:

  • 我做了$myUrl = urlencode('http://img2json.appspot.com/go/?url=http://myUrl.com/$fileName'); $exif = file_get_contents('$myUrl');,但我没有注意到有什么不同。桌子还是空的。
  • 尝试这样做:$exif = file_get_contents($myUrl);
  • 没有雪茄。我将使用 urlencode() 但我认为问题可能源于其他原因。
  • 试试这个$myUrl = urlencode('http://img2json.appspot.com/go/?url=http://myUrl.com/'.$fileName); $exif = file_get_contents($myUrl);
  • 没有什么遗憾
猜你喜欢
  • 2020-09-15
  • 1970-01-01
  • 2017-01-04
  • 2020-01-16
  • 2018-08-28
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
相关资源
最近更新 更多