Hallo,

ik zoek een manier om via oproep van een lokaal script (bv. localhost/transfer.php)

enkele tabellen van een remote server te kopiƫren naar mijn lokale server.

Dit script is ongeveer wat ik wil:


Maar dit geeft foutmeldingen telkens wanneer ik INT velden wil kopiƫren die NULL-waarde hebben: Data truncated for column 'XXXXXXX' at row 1

ik kan het natuurlijk via phpMyAdmin doen maar de bedoeling is dat andere mensen dit ook gebruiken en die kennen geen php, mysql, ...

Kent iemand zo een handig scriptje?
Het probleem met PHP is dat een vergelijking tussen null en een lege string (if (null == '')) true is, maar dat wil nog niet zeggen dat PHP het als hetzelfde ziet. Als je isset() gebruikt, haal je wel degelijk de echte NULL-waardes eruit.
Maar niet uit een fetch.
Een var_dump daarop geeft alleen maar strings
Dat gaan we proberen. ;-)
<?php
$dbh = new mysqli($host,$user,$pass,$database);
$sql = "select username, fullname, contract_hours, active from users";
$rs = $dbh->query($sql);
$row = $rs->fetch_assoc();
var_dump($row);
?>
geeft:

array(4) {
  ["username"]=>
  string(9) "pietjepuk"
  ["fullname"]=>
  NULL
  ["contract_hours"]=>
  string(2) "32"
  ["active"]=>
  string(1) "1"
}

Ik zie een NULL...
Ik ook ;-)
Ik werk niet met nullables, dus het is nooit opgevallen.
Wat ik me wel afvraag:
Waarom kan dat onderscheid wel gemaakt worden, en is de rest, ongeacht het datatype, een string?
> Waarom kan dat onderscheid wel gemaakt worden, en is de rest, ongeacht het datatype, een string?

Pff... het is veel te laat voor dit soort diepzinnige vragen.

Ik denk dat het ermee te maken heeft dat PHP alle scalar-datatypes impliciet cast naar het datatype dat in een bepaalde situatie nodig is. Het maakt dus niet uit of een integer als string wordt opgeslagen, want als je ermee gaat rekenen maakt PHP er vanzelf wel een integer van.

Bovendien gebruik je in een query de string-representatie van een integer, dus is het eigenlijk alleen maar handig dat fetch() er al een string van heeft gemaakt. ;-)

Reageren