Вот как я это сделал:
Сначала определите имена колонок, которые вы будете использовать, или оставьте поле пустым, и pdo предположит, что вы хотите использовать все столбцы таблицы - в этом случае вы «Мне нужно сообщить значения строк в том порядке, в каком они появляются в таблице.
$cols = 'name', 'middleName', 'eMail';
$table = 'people';
Теперь предположим, что у вас уже подготовлен двухмерный массив. Итерации и построение строки с вашими значениями строк:
foreach ( $people as $person ) {
if(! $rowVals ) {
$rows = '(' . "'$name'" . ',' . "'$middleName'" . ',' . "'$eMail'" . ')';
} else { $rowVals = '(' . "'$name'" . ',' . "'$middleName'" . ',' . "'$eMail'" . ')';
}
Теперь, что вы только что сделали, это проверить, были ли уже определены строки $, а если нет, создайте их и сохраните значения строк и необходимый синтаксис SQL, поэтому он будет действительным оператором. Обратите внимание, что строки должны входить в двойные кавычки и одинарные кавычки, поэтому они будут незамедлительно распознаны как таковые.
Все, что осталось сделать, это подготовить оператор и выполнить как таковой:
$stmt = $db->prepare ( "INSERT INTO $table $cols VALUES $rowVals" );
$stmt->execute ();
Протестировано до 2000 строк до сих пор, а время исполнения удручающее. Запустит еще несколько тестов и вернется сюда, если у меня есть что-то еще.
С уважением.
Разобрался. Заменен sslStream.AuthenticateAsClient ("gateway.sandbox.push.apple.com"); с sslStream.AuthenticateAsClient ("gateway.sandbox.push.apple.com", clientCertificateCollection, SslProtocols.Default, false); И зарегистрировал сертификаты на ПК.
Редактировать: вот код для создания полезной нагрузки в соответствии с запросом:
private static byte[] GeneratePayload(byte [] deviceToken, string message, string sound)
{
MemoryStream memoryStream = new MemoryStream();
// Command
memoryStream.WriteByte(0);
byte[] tokenLength = BitConverter.GetBytes((Int16)32);
Array.Reverse(tokenLength);
// device token length
memoryStream.Write(tokenLength, 0, 2);
// Token
memoryStream.Write(deviceToken, 0, 32);
// String length
string apnMessage = string.Format ( "{{\"aps\":{{\"alert\":{{\"body\":\"{0}\",\"action-loc-key\":null}},\"sound\":\"{1}\"}}}}",
message,
sound);
byte [] apnMessageLength = BitConverter.GetBytes((Int16)apnMessage.Length);
Array.Reverse ( apnMessageLength );
// message length
memoryStream.Write(apnMessageLength, 0, 2);
// Write the message
memoryStream.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(apnMessage), 0, apnMessage.Length);
return memoryStream.ToArray();
} // End of GeneratePayload
«Полученное сообщение было неожиданным или плохо отформатировано». Обычно ошибка возникает, когда вы не зарегистрировали сертификат p12 в Windows. (В Vista просто дважды щелкните файл p12, и откроется мастер импорта)
Другой способ - просто использовать классы X509Certificate2 и X509CertificateCollection2.
Недавно я использовал Growl For Windows для отправки сообщений клиенту Prowl на IPhone из кода .Net . Так что вы можете получить свою функциональность без написания самого push-сервера.
Из комментария Зенокса: используйте другую версию AuthenticateAsClient
sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, SslProtocols.Default, false);