【问题标题】:Bind array to mysqli prepared statement将数组绑定到 mysqli 准备好的语句
【发布时间】:2014-03-31 05:40:55
【问题描述】:

存储图像路径/名称的数组: $wall_filenames[]

$wall_filenames:的内容

Array ( [0] => wallpapers/2014/03/calendar-thumbnail-520x264.jpg [1] => wallpapers/2014/03/calendar-preview2-786x305.jpg )

MySQL 查询:

$sql = "INSERT INTO walls(wall_name, wall_thumbnail_path, wall_preview1_path, 
        wall_preview2_path, wall_preview3_path,
        upload_date, d_1280x800_path, d_1366x768_path, d_1920x1080_path,
        p_640x960_path, p_640x1136_path, p_720x1280_path, p_768x1280_path,
        p_1080x1920_path, t_1024x768_path, t_2048x1536_path)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$insert_wall = $connectDB->prepare($sql);

所以问题是,该表包含几列。但是当我插入一次时,没有必要上传所有文件,在我上面的例子中我只上传了两个。我需要做的是将这些数组元素添加到表中适当的列中。在这种情况下,我希望将$wall_filenames[0] 存储到wall_thumbnail_path$wall_filenames[1]wall_preview2_path。我不确定如何使用bind_param() 绑定数组以指向表中的正确列。

【问题讨论】:

  • @YourCommonSense 这似乎不相似。这个问题是关于需要绑定的可变数量的列。
  • @vephelp 还请注意代码格式并始终保持相同。而不是将一半代码移出屏幕

标签: php arrays mysqli


【解决方案1】:

调用bind_param时包含数组索引:

$insert_wall->bind_param('sss...', $wall_name, $wall_filenames[0], $wall_filenames[1], ...);

【讨论】:

  • 我的$wall_filenames[1] 包含preview2 的路径,在这种情况下,我猜它会将路径存储到不同的列。
  • 抱歉,没有注意到所有名称相似的列。但想法是一样的——只要把它放在参数列表中的适当位置即可。
【解决方案2】:

要有创意。

不要存储可以计算的数据。

在数据库中存储常数绝对没有意义。只需制定一些命名策略,然后摆脱所有这些路径列,并根据命名策略检查磁盘中的文件。

【讨论】:

  • amm 我想我没有将数字存储在数据库中,只是将它们用作参考。但是,是的,感谢您关于使用名称而不是数字的建议。
  • 有一个地方可以提供建议,cmets。
  • @vephelp 你不明白。 786x305 是存储在数据库中的数字。将其存储在那里没有意义。现在明白了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2012-12-01
  • 2013-11-23
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多