Я начинаю изучать PHP для взаимодействия с MySQL DB.
Я должен получить данные из двух несвязанных таблиц и сформировать массив объектов stdClass, а затем вывести их в виде массива json.
Мне до сих пор удалось получить данные из таблицы 1 и добавить некоторые столбцы из нее в
myobjects [], следующим образом ..
Здесь $ array это массив первичных ключей, также я передаю ссылку на массив myobjects
function load_from_table1($array , &$myobjects)
{
foreach($array as $num)
{
$obj=(object)null;
$obj->prop1 = $num;
$sql="SELECT * FROM `table1` WHERE col1=".$num;
$result = mysqli_query($con, $sql);
if($result!=null)
{
$row = mysqli_fetch_assoc($result);
//inserting data into object
$obj->prop2 = $row['col2'];
$obj->prop3 = $row['col3'];
$obj->prop4 = $row['col4'];
}$myobjects[]=$obj;
}
}
Пока все хорошо, мне нужно добавить еще два свойства ко всем элементам в массиве myobjects, полученном из table2.
function load_from_table2(&$data)
{
for($i=0;$i<sizeof($data);$i++)
{
$obj=(object)$data[$i];
$id=$obj->prop1;
$sql="SELECT * FROM `table2` WHERE col1=".$id;
$result = mysqli_query($con, $sql);
if($result!=null)
{
$row = mysqli_fetch_assoc($result);
//$temp=$row['name'];
//echo $temp;
//$obj->name = "test1";
$obj->name = $row['name'];
//$temp=$row['description'];
//echo $temp;
//$obj->description = "test2";
$obj->description = $row['description'];
}
}
Когда я сбрасываю myobjects как json, нет вывода. Но $ temp эхом правильно, даже когда я использую прямые значения, кажется, что все работает нормально.
Может ли кто-нибудь помочь мне с этим, также было бы очень полезно объяснить, что я делаю неправильно. Благодарю вас.
Некоторые подробности о рабочей среде. Из-за ответа, который я дал,
Я использую wampserver 2.5 64 bit, и сейчас выполняю php файл из браузера firefox.
Ситуация немного сбивает с толку, так как я могу прочитать значение и распечатать его или сохранить в переменную, но не сохранить его как свойство объекта.
Я получил его на работу, но проблема была не с кодом. Кажется, что столбец в таблице, которую я читал, имеет сопоставление, установленное в ‘utf8_general_ci’, не уверенное, что это значит. Но когда я удалил эту настройку, все заработало как положено. Но я чувствую, что сопоставление не является основной причиной. Так что я буду держать этот вопрос открытым в надежде, что некоторые могут дать объяснение.
Кажется, я искал не те вопросы. Читая о сопоставлении, я обнаружил, что некоторые наборы символов не поддерживаются полностью, поэтому я попытался отобразить содержимое массива объектов вместо json_encode и нашел его напечатанным.
в поисках с этой целью я нашел еще один QST Вот на stackoverflow, который решил мою проблему.
Просто добавил эту строку :: mysqli_set_charset ($ con, ‘utf8’); прежде чем я начал какие-либо запросы к этой таблице, и json_encode начал работать.
Других решений пока нет …